1

我有一堆我以编程方式创建的 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”,当我访问该字段的值/显示值时,我会得到“123”。

  2. 如果我使用“onChange”,如何获取触发 onChange 事件的元素的 ID?(它不像 evt.target.id 那样简单,对吧?试过了,它没有用)

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

谢谢!

4

3 回答 3

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));
  }
}
于 2010-08-04T13:42:53.160 回答
1

我会认真考虑改用 onkeyup 事件。在另一个stackoverflow答案中找到了这个

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

  1. 按下键:按下键时
  2. 按键保持:按键被按住
  3. Key up: key is release 在你的情况下,问题可以通过使用 keyup 事件来解决
于 2010-10-21T08:52:52.237 回答
0

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

mytextbox.get("value")在事件触发时给出最新值

(注意:mytextbox.value直到文本框被验证后才给出最新的值)

于 2013-01-28T15:48:17.707 回答