Попробуйте использовать следующий пользовательский пример ScriptUI .
Создает простое dialog
окно , которое содержит два edittext
элемента ,
Первый элемент edittext
имеет ограниченный ввод. Он позволяет вводить одну запятую , символ / клавишу и только одну или несколько следующих клавиш:
0 1 2 3 4 5 6 7 8 9 + -
Второй элемент edittext
имеет неограниченный ввод. Он позволяет вводить любой символ / клавишу, т. Е. По умолчанию.
example.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;
}
}
}
Объяснение:
- Это существенно добавляет прослушиватель событий к данному элементу
edittext
для обнаружения keydown
событий. - В теле функции обработчика прослушивателей событий мы обнаруживаем каждую нажатую клавишу и определяем, является ли клавиша допустимой или недопустимой.
- Событие
onChanging
используется, чтобы по существу определить, является ли запятая (,
) уже была введена или нет. Если запятая не существует, когда происходит каждое событие onChanging
, мы устанавливаем переменную hasComma
в false
. Используя событие onChanging
и переменную hasComma
, он предоставляет нам механизм для ограничения ввода только одной запятой (,
).
Использование:
Обратите внимание, что в разделе "Использование" файла example.jsx
мы разрешаем ввод данных с помощью ключа / символа с ограничениями, вызывая пользовательскую функцию restrictInputKeys
и передавая ссылка на экземпляр элемента edittext
, который мы хотим ограничить. т.е.
restrictInputKeys(edittext); //<-- Enable restricted input.
Если вы хотите включить ограниченный ввод с клавиатуры во втором экземпляре edittext
, вам просто нужно снова вызвать функцию restrictInputKeys
и передать ссылку на второй экземпляр edittext
. Например:
restrictInputKeys(edittext2); //<-- Enable restricted input for the second instance.
Примечание Я протестировал пример, представленный в PhotoShop CS5, и он успешно работал. Он не был протестирован в PhotoShop CS6 - могут потребоваться некоторые изменения.