在 "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 示例。

它产生一个简单的dialogwindow that contains two edittext个元素。

  1. 第一个 edittext 元素输入受限。只允许输入一个逗号,character/key,只允许输入以下一个或多个字符键:

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

  2. 第二个 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 中测试 - 可能需要进行一些更改。