Dojo: Как получить последнее значение в NumberTextBox на onKeyPress или onChange? - PullRequest
1 голос
/ 21 июня 2010

У меня есть набор NumberTextBoxes, которые я создал программно. Теперь я должен вычислить некоторые значения при нажатии клавиш, поэтому я вызываю функцию для этого ... Выглядит примерно так:

...
<head>
...
function setNumTextBox() {
    ...
    var val = {
        name: "mytextbox",
        onKeyPress: keyPressFxn
    }
    new dijit.form.NumberTextBox(val, "mytextbox");
}

function keyPressFxn(evt) {
    // do the processing here
}
...

Теперь моя проблема заключается в следующем. Пользователь вводит, скажем, «12». Когда пользователь вводит «1», dijit.byId («mytextbox»). Attr («value») равно «». Когда пользователь вводит «2», значение теперь равно «1». Короче говоря, значение (я также пробовал атрибут «displayValue»), которое я получаю в функции, не является последним.

Я попытался использовать «middleChanges: true», но в этом случае он не работает для текстового поля. Теперь я пошел дальше и использовал событие «onChange» вместо «onKeyPress». Я получаю правильные значения, но ... я не знаю, что вызвало событие onChange.

Вопросы:

  1. Если я собираюсь использовать событие onKeyPress, как мне получить последнее значение? Это означает, что если я введу «123», я получу «123», когда получу доступ к значению поля / displayValue.

  2. Если я использую "onChange", как мне получить идентификатор элемента, который вызвал событие onChange? (это не так просто, как evt.target.id, не так ли? Попробовал тот, и это не сработало)

  3. Или я должен использовать комбинацию из 2? Например, получить идентификатор вызывающего абонента с помощью onKeyPress, а затем получить обновленное значение, введенное пользователем с помощью onChange?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 04 августа 2010

Это должно приблизить вас к тому, что вы хотели.Вам также может понадобиться отслеживать константы dojo.keys.CLEAR и dojo.keys.DELETE.

function keyPressFxn(evt) {
  var value = this.value;
  if (dojo.keys.BACKSPACE == evt.keyCode ) {
    console.log(value.substr(0, value.length - 1));
  } else {
   console.log(value + String.fromCharCode(evt.charCode));
  }
}
1 голос
/ 21 октября 2010

Я бы серьезно подумал об использовании события onkeyup. нашел это в другом ответе stackoverflow :

Потому что вы используете событие нажатия клавиши. нажатие клавиши имеет 3 фазы:

  1. Клавиша: при нажатии клавиши
  2. Удержание клавиши: удержание клавиши
  3. Key up: key is release В вашем случае проблему можно решить с помощью события keyup
0 голосов
/ 28 января 2013

Не уверен, что это только потому, что API изменился за последние 2 года - но:

mytextbox.get("value") дает актуальное значение при возникновении события

(BEWARE tho:mytextbox.value не возвращает последнее значение до тех пор, пока текстовое поле не будет проверено)

...