在 "edittext" 框中输入期间是否可以锁定键盘中的某些键 - Photoshop 脚本 CS6?
Is possible to lock certain keys in keyboard during input in "edittext" box - Photoshop script CS6?
我只想启用按键的键盘输入:+
-
[0-9]
,
并禁用 edittext
框中的其余按键输入。
此外,如果 edittext
已经有任何 ,
字符,我想阻止任何进一步的键 ,
输入。
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();
提前致谢。
我不太确定剩下的部分,但是为了只按下数字,您可以将代码更改为如下所示:
edittext.keypress = function(e){
if(e.keyCode < 48 || e.keyCode > 57){
e.preventDefault();
}
}
之后,只需为我假设的其余键找到 if 语句的正确组合即可。您可以通过在 Google.
上搜索 'JavaScript key codes' 来找到键码及其对应键的列表
希望对您有所帮助!
考虑使用以下自定义 ScriptUI 示例。
它产生一个简单的dialog
window that contains two edittext
个元素。
第一个 edittext
元素输入受限。只允许输入一个逗号,character/key,只允许输入以下一个或多个字符键:
0 1 2 3 4 5 6 7 8 9 + -
第二个 edittext
元素具有不受限制的输入。它允许输入任何 character/key,即按照默认功能。
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;
}
}
}
解释:
- 这实质上是将 event listener 添加到给定的
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 中测试 - 可能需要进行一些更改。
我只想启用按键的键盘输入:+
-
[0-9]
,
并禁用 edittext
框中的其余按键输入。
此外,如果 edittext
已经有任何 ,
字符,我想阻止任何进一步的键 ,
输入。
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();
提前致谢。
我不太确定剩下的部分,但是为了只按下数字,您可以将代码更改为如下所示:
edittext.keypress = function(e){
if(e.keyCode < 48 || e.keyCode > 57){
e.preventDefault();
}
}
之后,只需为我假设的其余键找到 if 语句的正确组合即可。您可以通过在 Google.
上搜索 'JavaScript key codes' 来找到键码及其对应键的列表希望对您有所帮助!
考虑使用以下自定义 ScriptUI 示例。
它产生一个简单的dialog
window that contains two edittext
个元素。
第一个
edittext
元素输入受限。只允许输入一个逗号,character/key,只允许输入以下一个或多个字符键:0 1 2 3 4 5 6 7 8 9 + -
第二个
edittext
元素具有不受限制的输入。它允许输入任何 character/key,即按照默认功能。
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;
}
}
}
解释:
- 这实质上是将 event listener 添加到给定的
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 中测试 - 可能需要进行一些更改。