使用Javascript/jQuery,當某人按下某個鍵時,如何自動重複keydown事件或等效事件?當按鍵被按下時,跨瀏覽器的方式來自動重複keydown事件
我真正想要的是能夠檢查一個鍵是否關閉,但從其他問題看來,這看起來是不可能的。建議的解決方法似乎是記錄keydown和keyup事件,然後假設如果記錄了keydown事件並且沒有後續的keyup,則關鍵是關閉。
在我的情況下,該解決方案會遇到問題。我正在設計一個在線實驗。用戶應該按住整個實驗的「T」鍵,永不放棄。該實驗由多次試驗組成,每次試驗都無法獲得以前試驗記錄的信息。因此,試驗1可以記錄T的keydown,但試驗2不能訪問該記錄,因此不知道T是否已經關閉。
現在,如果按住T鍵會產生T的自動重複keydown事件,我不會有任何問題,因爲試驗2只會捕獲T來的下一個keydown事件。但它看起來像我不會得到自動重複keydown事件從按住按鍵,至少在Firefox中。從我所看到的情況看,不同瀏覽器處理關鍵字的方式有所不同。什麼是解決我的問題的良好的跨瀏覽器方式?順便說一句,如果它很重要,我還需要能夠檢測其他鍵的鍵盤事件和鍵盤事件,同時進行所有這些操作。
編輯:在閱讀了我回來的一些評論並證實我確實在普通情況下得到了重複的keydown事件。但是,我真的不明白他們在我需要他們的具體情況。我有一些簡單的代碼,我認爲隔離問題:
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
</head>
<body>
<div id="target"></div>
</body>
<script type="text/javascript">
var i;
function foo() {
i++;
$('#target').html(i);
}
function doTrial() { // do trial
i=0;
$(document).keydown(foo);
$(document).keyup(endTrial);
}
function endTrial() { // end trial
$('#target').html('');
$(document).unbind('keydown',foo);
$(document).unbind('keyup',endTrial);
doTrial();
}
doTrial();
</script>
</html>
如果你按一個鍵,並按住不放,然後鬆開,然後再按,該行爲符合市場預期,即有一個計數器,它鍵被按下時遞增,釋放時消失,然後再次按下時開始遞增。但如果你按下兩個鍵,然後釋放ONE,我會認爲另一個(未釋放)鍵將繼續發送keydown事件,以便計數器(在重置後)繼續增加。事實上,這並沒有發生。任何想法爲什麼以及如何使它發生?
我沒有測試過其他環境中,但在Chrome在Mac上運行雪豹,當由於自動重複,我按住了一個鍵,重複發生了keydown事件。 – Barmar
感謝你的回覆,看起來你一般都是對的 - 在特定的情況下,我只是沒有得到重複的關注。我在我原來的帖子中澄清了這些。 – baixiwei