2010-06-21 25 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沒有給出最新的值,直到該文本框已被驗證後)

相關問題