Ausgabe
Ich möchte nur die Tastatureingabe der Tasten aktivieren: +
-
[0-9]
,
und die restliche Tasteneingabe im edittext
Feld deaktivieren.
Auch wenn edittext
bereits 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 dialog
Fenster , das zwei edittext
Elemente enthält.
-
Das erste
edittext
Element 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 + -
-
Das zweite
edittext
Element 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 detectkeydown
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 eachonChanging
event fires we set thehasComma
variable tofalse
. By utilizing theonChanging
event and thehasComma
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.jsx
Datei eingeschränkte Tasten-/Zeicheneingaben aktivieren, indem wir die benutzerdefinierterestrictInputKeys
Funktion aufrufen und einen Verweis auf die Instanz desedittext
Elements übergeben, das wir einschränken möchten. dhrestrictInputKeys(edittext); //<-- Enable restricted input.
Wenn Sie die eingeschränkte Tasteneingabe in der zweiten
edittext
Instanz aktivieren möchten, müssen Sie die Funktion nur erneut aufrufenrestrictInputKeys
und einen Verweis auf die zweiteedittext
Instanz ü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)