我有一堆我以编程方式创建的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事件。
问题:
如果我要使用“onKeyPress”事件,我该如何获取最新值?这意味着,如果我输入“123”,当我访问该字段的值/ displayedValue时,我将得到“123”。
如果我使用“onChange”,我如何获取触发onChange事件的元素的id? (它不像evt.target.id那么简单吗?尝试过那个并且它不起作用)
或者,我是否必须使用2的组合?比如,通过onKeyPress获取调用者的id然后获取用户通过onChange键入的更新值?
谢谢!
答案 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个阶段:
- 按键:按键时按
- 按住键:按住键
- 键入:键释放在您的情况下,可以使用键盘事件
解决问题 醇>
答案 2 :(得分:0)
不确定这是否因为API在过去两年中发生了变化 - 但是:
mytextbox.get("value")
会在事件触发时提供最新值
(请注意:mytextbox.value
在文本框验证之前不会提供最新值)