2014-02-27 40 views
1

我剛開始看Dart。我在編輯<input type="form">時更新<p>標籤。OnKeyDown事件沒有立即更新,OnKeyUp是

但是,當我使用onKeyDown事件時,它不是即時更新,而是延遲1次按鍵。所以如果我按AAA,它只會顯示AA。

如果我使用onKeyUp,AAA會給我AAA。

爲什麼在使用onKeyDown時沒有按預期進行更新?

下面是代碼:

import 'dart:html'; 

TextInputElement inputText; 
ParagraphElement pargraphText; 

void main() { 
    inputText = querySelector("#text"); 
    pargraphText = querySelector("#paragraphText"); 

    // inputText.onKeyDown.listen(updateTekst); 
    inputText.onKeyUp.listen(updateTekst); 
} 

void updateTekst(Event e) { 
    pargraphText.text = inputText.value.toUpperCase(); 
} 

回答

3

這是因爲輸入元素沒有價值呢。它在keyPress或keyUp上獲取值,但尚未在keyDown上獲得。 如果您使用來自事件的值而不是輸入字段,那麼即使是第一個keyDown也會得到該值。

您可以使用e.keyCode(charCode爲未設置上的keyDown)

import 'dart:convert'; 

... 

// doesn't distinguish between upper/lower case (you have to check e.shiftKey) 
UTF8.decode([e.keyCode]);