2013-06-25 49 views
1
<html> 
<body onkeypress = "show_key(event.which)"> 
<form method="post" name="my_form"> 
The key you pressed was: 
<input type="text" name="key_display" size="2"/> 
</form> 
<script type="text/javascript"> 
function show_key (the_key) 
{console.log(the_key); 
     document.my_form.key_display.value = String.fromCharCode (the_key); 
} 
</script> 
</body> 
</html> 

以上代碼奇怪的行爲就是從這裏開始:http://www.elated.com/articles/events-and-event-handlers/當我使用event.which在JS

問:

1.In前端,如果我輸入:一個,它會顯示:AA ,爲什麼它顯示雙字母,我只輸入一個?

2. show_key(event.which),這裏事件的意思是'按鍵',我可以改變事件的名字嗎?我試圖改變事件E,然後在前端,我輸入:一,它顯示:一個,但在控制檯,這也表明:ReferenceError: e is not defined

+0

你有「aa」的原因似乎不在你顯示的代碼中。 –

+0

是的,它是document.my_form.key_display.value = String.fromCharCode(the_key);然後它自己附加它的事件值 – Edorka

+0

@ user2507818爲什麼你只是不把焦點放在載入文檔上的輸入字段? – Edorka

回答

1

要檢索的事件必須調用句柄這樣

<body onkeypress = "show_key(event)"> 

則函數

function show_key (e) 
{ 
     var the_key = e.which; 
     console.log(e.which); 
     document.my_form.key_display.value = String.fromCharCode (the_key); 
} 

關於雙打字它不是一個雙打字,首先你要設置的key_Display價值給你計算的字符串中,那麼,當事件已經過去以爲你的處理器它增加符號到當前集中的輸入字段。更多關於活動仙境:http://www.w3.org/TR/DOM-Level-3-Events/#dom-event-architecture

如果你只想始終圍繞同一個輸入字段這是一個比較簡單的方法:

<body onload="focusMyInput"> 
    <form method="post" name="my_form"> 
     <input type="text" id="my_input" onblur="focusMyInput" name="key_display" size="2"/> 
... 

var focusMyInput = function(){ 
    document.getElementById('my_input').focus(); 
} 

此代碼將做負載輸入#my_input將被重點突出,如果它變得模糊(失去焦點),它將運行相同的例程來恢復它。

+0

對不起,這意味着什麼:'當事件已經過去,你認爲你的處理程序會將符號添加到當前集中的輸入字段中? 「我不明白。 – user2507818

+0

好的,當一個事件被觸發時,它會沿着dom樹上下移動,並在他們的路上激活處理程序。此關鍵事件激活2,一個位於您編程的文檔根目錄,另一個位於本機輸入填充符 – Edorka

+0

您應該閱讀http://www.w3.org/TR/DOM-Level-3-Events/#dom-event -architecture – Edorka