Dojo:如何在onKeyPress或onChange上的NumberTextBox中获取最新值?

时间:2010-06-21 09:10:25

标签: dojo onchange onkeypress

我有一堆我以编程方式创建的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”。简而言之,我在函数中获得的值(我也尝试过“displayedValue”属性)并不是最新的。

我尝试使用“intermediateChanges:true”但是对于这种情况的文本框不起作用。现在,我继续使用“onChange”事件而不是“onKeyPress”。我得到了正确的值,但是......我不知道是什么叫做onChange事件。

问题:

  1. 如果我要使用“onKeyPress”事件,我该如何获取最新值?这意味着,如果我输入“123”,当我访问该字段的值/ displayedValue时,我将得到“123”。

  2. 如果我使用“onChange”,我如何获取触发onChange事件的元素的id? (它不像evt.target.id那么简单吗?尝试过那个并且它不起作用)

  3. 或者,我是否必须使用2的组合?比如,通过onKeyPress获取调用者的id然后获取用户通过onChange键入的更新值?

  4. 谢谢!

3 个答案:

答案 0 :(得分:2)

这应该让你接近你想要的。您可能还需要跟踪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 :(得分:1)

我会认真考虑使用onkeyup事件。 found this in another stackoverflow answer

  

因为您正在使用按键事件。按键有3个阶段:

     
      
  1. 按键:按键时按
  2.   
  3. 按住键:按住键
  4.   
  5. 键入:键释放在您的情况下,可以使用键盘事件
  6. 解决问题   

答案 2 :(得分:0)

不确定这是否因为API在过去两年中发生了变化 - 但是:

mytextbox.get("value")会在事件触发时提供最新值

(请注意:mytextbox.value在文本框验证之前不会提供最新值)