2010-06-21 37 views
1

我有一堆编程创建的NumberTextBoxes。现在,我要计算在按键的一些值,所以我调用一个函数为...看起来是这样的:Dojo:如何在onKeyPress或onChange的NumberTextBox中获取最新值?

... 
<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键入的更新值?

谢谢!

回答

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)); 
    } 
} 
+0

啊,这可能是它...谢谢! – callie16 2010-08-10 02:14:23

+0

但你使用什么事件? – 2012-08-01 09:47:53

1

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

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

  1. 键下:当关键是按
  2. 保留键:关键是按住
  3. 关键了:关键是释放你的情况,问题可以通过使用keyup事件得到解决
+0

谢谢,将看看:) – callie16 2010-10-22 01:33:34

0

不知道这是否只是因为API在过去的2年里改变了 - 但是:

mytextbox.get("value")给出了最新的值作为事件触发

(请注意寿:mytextbox.value没有给出最新的值,直到该文本框已被验证后)

相关问题