2012-12-13 20 views
0

是否有任何可能的方法來顯示只有一個字符時,按下一個鍵DOWN更長的一段時間我的意思是當我按下讓說's'DOWN更長一段時間我只想'''顯示,我不希望發生'ssssssssssssssssssssssssssssssssssssssssss ....'。如何只顯示一個鍵,如果我把按鍵放在文本區

使用這種方法,因爲這帶來的問題是,如果用戶快速鍵入並同時按下兩個鍵,只有第二個會顯示,例如,如果我按下'k'並按下白色讓'k'去'p'只有'p'會顯示出來。

var textarea=''; 

document.getElementById('textareaID').onkeydown=keydown; 
document.getElementById('textareaID').onkeyup=keyup; 

function keydown() { 

this.value=textarea; 

} 

function keyup() { 
textarea=this.value; 
this.value=textarea; 

} 

而且請不要說使用計數器,因爲它不起作用因爲某種原因相信我我已經嘗試了過去3天。

http://toki-woki.net/lab/long-press/http://toki-woki.net/lab/long-press/這就是我基本上想要做的,但我不能理解你拿着鑰匙的部分,只有一個顯示出來,當然,如果我按下一個鍵,而關鍵是下來我按另一個他們兩個得到顯示休息是容易的。

所以我會愛和解釋它讓我瘋狂。

+1

貴公司是否招聘? – 2012-12-13 19:26:07

+0

我在大學這是爲了學習的目的。 –

+1

在一個嚴肅的說明中,這只是在沒有任何測試的情況下進行猜測,如果你有一個布爾值,就像var keyReleased = false;然後在你的keydown中使它成真,然後用if(keyReleased) – 2012-12-13 19:39:03

回答

5

好吧我想我明白了。

1:在keydown上取消輸入到textarea。

2:在keyup放在點擊字母。

document.getElementById('textareaID').onkeydown=keydown; 
document.getElementById('textareaID').onkeyup=keyup; 

// keydown is run more than once if held down hence "ssssssss" 
function keydown (event) { 
    // cancel input 
} 
// since the keyup event is only fired once we will do most of the work here 
function keyup (event) { 
    // insert input 
} 

下面是代碼(有註釋,所以你可以看到這是怎麼回事): http://jsfiddle.net/NerfAnarchist/gXVuC/

+0

僅在'keyUp'上打印字符。它修改了使用任何文本字段的正常方式。 –

1

正如評論者PA指出的那樣,我覺得這是不好的做法,改變文本框或文本域的本地行爲。在做這件事之前看看你的其他選項。

...但IF你必須這樣做:

可以使用keyDown事件,讓事件傳遞的條件下,它後面是keyUp事件。以下代碼是based on this fiddle

​document.getElementById('box').addEventListener('keydown', function(event){ 
    // Superglobal window.characterPrinted to detect if the event has already fired. 
    if(window.characterPrinted != true){ 
     window.characterPrinted = true; 
     this.value += String.fromCharCode(event.keyCode); 
     event.preventDefault(); 
    } 
})​​​​​​​​; 

document.getElementById('box').addEventListener('keyup', function(event){ 
    // Reset superglobal 
    window.characterPrinted = false; 
}); 

請注意,此代碼使用addEventListenerpreventDefault,這是不能保證在舊的瀏覽器工作。您需要使用不同的方法綁定事件。 (我在看你,IE7)。

另注:此代碼增加textarea。因此,如果一個delete鍵按下,它會嘗試 a delete,它什麼都不做。你可以做一個event.keyCode篩選,看看它是否是一個字母,然後擺弄event本身,就像Michael建議的那樣。

相關問題