2012-06-05 75 views
0

我寫了一個樣本HTML頁面調用函數的onkeyup只有一次

<html> 
<head> 
<script> 
function validate() { 
alert(document.getElementById('newpass').value); 
} 
</script> 
</head> 

<body> 
<input type="text" id="newpass" onkeyup="validate();" /> 
</body> 
</html> 

但是像當我按退格鍵的情況下,該函數獲取調用多次。 如何讓它只執行一次?

所有我想要做的是讓一個事件一個輸入框的當前值,目前onkeypress事件是不是給當前的一個,但前一個。 onkeyup給出當前但執行很多次。

+0

它,它周圍的其他方法...'keypup'閃光一次,而'keypress'觸發多次。 – gdoron

+1

也許'onchange'在這種情況下可能會更好? – jeremyharris

回答

1

如果你想要的功能,當用戶輸入完成後,再使用onchange,而不是重點了

注意得到的值: onkeyup工作,因爲它應該。如果你釋放密鑰,它會被調用一次。如果你按住退格鍵然後釋放,那麼它只會被調用一次。

onkeypress,因爲該值被存儲前被踢事件不會得到值。

另一種選擇是退格忽略

function validate(event) { 
    var keynum; 
    if (window.event) { 
     keynum = window.event.keyCode; 
    } else if (event.which) { 
     keynum = event.which; 
    } 

    if (keynum == 8) { // backspace 
     return; 
    } 
    alert(document.getElementById('newpass').value); 
} 

或者你可以檢查前一個關鍵,如果是相同的,然後忽略它

var previousKey; 
function validate(event) { 
    var keynum; 
    if (window.event) { 
     keynum = window.event.keyCode; 
    } else if (event.which) { 
     keynum = event.which; 
    } 

    if (keynum == previousKey) { // backspace 
     return; 
    } 

    previousKey = keynum; 

    alert(document.getElementById('newpass').value); 
} 

或者其退格再次忽略

+0

+1試圖幫助 – periback2

4

這聽起來像你希望得到您的輸入字段的當前值有人打字,但想如果他們使用退格鍵來忽略:

<html> 
<head> 
<script type="text/javascript"> 
function validate(that,e){ 
    var eventObject = window.event? event : e; 
    var keyCode = eventObject.charCode? eventObject.charCode : eventObject.keyCode; 
    if (keyCode != 8) { 
    alert(that.value); 
    } 
} 
</script> 
</head> 

<body> 
<input type="text" id="newpass" onkeyup="validate(this,event);" /> 
</body> 
</html> 
+0

我說,在我的答案..想知道爲什麼創建一個新的答案沒有什麼補充。 –

+0

,因爲我的帖子有一個答案頁面打開,並且與您同時發佈,但速度較慢,因爲我正在驗證我的代碼... p.s. re:「什麼都不加」你的代碼不是跨瀏覽器兼容的,比較我們的代碼。 –

+0

@ D3mon-1stVFW還有就是你的答案,這是一個足夠小的時間間隔的假設,這個答案可能是在你發佈你的時間被寫入的過程之間有3分鐘的差距。 – apsillers