[FIXED] Ist möglich, bestimmte Tasten in der Tastatur während der Eingabe in “editText & quot; Box – Photoshop -Skript CS6?

Ausgabe

Ich möchte nur die Tastatureingabe der Tasten aktivieren: + - [0-9] ,und die restliche Tasteneingabe im edittextFeld deaktivieren.

Auch wenn
edittextbereits ein ,Zeichen vorhanden ist, möchte ich jede weitere Tasteneingabe blockieren ,.

var mainWindow = new Window("dialog");
var edittext = mainWindow.add("edittext", undefined, 0);
edittext.characters = 40;

edittext.onChanging = function() {
    //enabling only input keys [0-9,-+] from keyboard
}

mainWindow.show();

Danke im Voraus.

Lösung

Erwägen Sie die Verwendung des folgenden benutzerdefinierten ScriptUI- Beispiels.

Es erzeugt ein einfaches dialogFenster , das zwei edittextElemente enthält.

  1. Das erste edittextElement hat eine eingeschränkte Eingabe. Es erlaubt ,nur die Eingabe eines Kommazeichens/einer Kommataste und einer oder mehrerer der folgenden Zeichentasten:

    0 1 2 3 4 5 6 7 8 9 + -

  2. Das zweite edittextElement hat uneingeschränkte Eingabe. Es erlaubt die Eingabe beliebiger Zeichen/Tasten, dh es entspricht der Standardfunktionalität.


beispiel.jsx

#target photoshop;

/**
 * @fileoverview Shows how to create a key restricted custom 'edittext' with
 * ScriptUI. This example permits only one comma `,` to be input and one or
 * more of following characters: `[0-9]` `+` `-`
 */

$.level=0;

//------------------------------------------------------------------------------
// Usage
//------------------------------------------------------------------------------

var mainWindow = new Window("dialog");


// 1. Example `edittext` element with restricted key input.
var label = mainWindow.add('statictext', undefined, 'Restricted input:');
label.alignment = 'left';

var edittext = mainWindow.add('edittext', undefined, 0);
edittext.characters = 40;
restrictInputKeys(edittext); //<-- Enable restricted input.


// 2. Example `edittext` element with unrestricted key input.
var label2 = mainWindow.add('statictext', undefined, 'Unrestricted input:')
label2.alignment = 'left';

var edittext2 = mainWindow.add('edittext', undefined, 0);
edittext2.characters = 40;


mainWindow.show();

//------------------------------------------------------------------------------
// Helpers
//------------------------------------------------------------------------------

/**
 * Determines whether an array includes a certain value among its elements.
 * @param {String} valueToFind - The value to search for.
 * @param {Array} arrayToSearch - The array to search in.
 * @returns {Boolean} true if the value valueToFind is found within the array
 */
function inArray(valueToFind, arrayToSearch) {
  for (var i = 0, max = arrayToSearch.length; i < max; i++) {
    if (arrayToSearch[i] === valueToFind) {
      return true;
    }
  }
  return false;
}

/**
 * Restricts the character keys permitted in a `edittext` element.
 * @param {Object} editTextInstance - Reference to `edittext` ScriptUI element.
 */
function restrictInputKeys(editTextInstance) {

  if (editTextInstance.constructor.name !== 'EditText') {
    throw new Error ('Invalid class. Expected `EditText` class.')
  }

  var hasComma = false;

  var permissibleKeys = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
      'Minus', 'Comma', 'Escape', 'Backspace'];
  /*
   * Add a listener to the given `edittext` element to detect `keydown` events.
   * In the bddy of its handler function we detect each key pressed to determine
   * whether the key is permissible or impermissible.
   */
  editTextInstance.addEventListener('keydown', function (key) {
    var keyName = key.keyName;
    var shiftKeyIsDown = key.shiftKey;
    var altKeyIsDown = key.altKey;

    if (shiftKeyIsDown && keyName === 'Equal') {
      return;
    }

    if ((shiftKeyIsDown || altKeyIsDown) && inArray(keyName, permissibleKeys)) {
      key.preventDefault();
      return;
    }

    if (! hasComma && keyName === 'Comma')  {
      hasComma = true;
      return;
    }

    if (hasComma && keyName === 'Comma') {
      key.preventDefault();
      return;
    }

    if (! inArray(keyName, permissibleKeys)) {
      key.preventDefault();
    }
  });

  /*
   * The `onChanging` event is utilized to detect whether a comma already exists.
   * If a comma DOES NOT exist set the `hasComma` variable to `false`.
   */
  editTextInstance.onChanging = function() {
    if (this.text.indexOf(',') === -1) {
      hasComma = false;
    }
  }
}

Erläuterung:

  • This essentially adds an event listener to a given edittext element to detect keydown events.
  • In the body of the event listeners handler function we detect each key pressed and determine whether the key is permissible or impermissible.
  • The onChanging event is utilized to essentially detect whether a comma (,) has already been input or not. If a comma does not exists when each onChanging event fires we set the hasComma variable to false. By utilizing the onChanging event and the hasComma variable it provides us with a mechanism for restricting the input of only one comma (,) key.

Usage:

  • Beachten Sie, dass wir im Abschnitt „Verwendung“ der example.jsxDatei eingeschränkte Tasten-/Zeicheneingaben aktivieren, indem wir die benutzerdefinierte restrictInputKeysFunktion aufrufen und einen Verweis auf die Instanz des edittextElements übergeben, das wir einschränken möchten. dh

    restrictInputKeys(edittext); //<-- Enable restricted input.
    

    Wenn Sie die eingeschränkte Tasteneingabe in der zweiten edittextInstanz aktivieren möchten, müssen Sie die Funktion nur erneut aufrufen restrictInputKeysund einen Verweis auf die zweite edittextInstanz übergeben. Zum Beispiel:

    restrictInputKeys(edittext2); //<-- Enable restricted input for the second instance.
    

Hinweis Ich habe das in Photoshop CS5 bereitgestellte Beispiel getestet und es hat erfolgreich funktioniert. Es wurde nicht in Photoshop CS6 getestet – einige Änderungen können erforderlich sein.



Beantwortet von –
RobC


Antwort geprüft von –
David Marino (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like

[FIXED] PSD -Dateiformat

Ausgabe Ich versuche, eine Dokumentation des PSD-Dateiformats zu finden, damit ich eine PSD-Datei einlesen und dann die einzelnen…