2017-10-12 119 views
2

你好,我試圖開發做一些驗證,每次輸入的變化(我使用onkeyup事件)除了當我們刪除了我們進入這裏面輸入的是我的實際代碼有沒有一種方法來實現keyup事件除了一個鍵?

\t \t \t function myFunction() { 
 
\t \t \t \t var input, filter, table, tr, td, i; 
 
\t \t \t \t var cpt = 0; 
 
\t \t \t \t var nbRow = 0; 
 
\t \t \t \t input = document.getElementById("filterInput"); 
 
\t \t \t \t filter = input.value.toUpperCase(); 
 
\t \t \t \t table = document.getElementById("test"); 
 
\t \t \t \t thead = table.getElementsByTagName("tbody"); 
 
\t \t \t \t tr = table.getElementsByTagName("tr"); 
 

 
\t \t \t \t for (i = 0; i < tr.length; i++) { 
 
\t \t \t \t \t td = tr[i].getElementsByTagName("td")[2]; 
 

 
\t \t \t \t \t if (td) { 
 
\t \t \t \t \t \t nbRow = nbRow + 1; 
 
\t \t \t \t \t \t if (td.innerHTML.toUpperCase().indexOf(filter) > -1) { 
 
\t \t \t \t \t \t \t tr[i].style.display = ""; 
 
\t \t \t \t \t \t } else { 
 
\t \t \t \t \t \t \t tr[i].style.display = "none"; 
 
\t \t \t \t \t \t \t cpt = cpt + 1; 
 

 
\t \t \t \t \t \t } 
 
\t \t \t \t \t } 
 
\t \t \t \t } 
 
\t \t \t \t if (nbRow == cpt) { 
 
alert("The list is empty") 
 
\t \t \t \t } 
 
\t \t \t }
<input id="filterInput" onkeyup="myFunction()"> 
 
<table id="test"> 
 
<thead> 
 
<tr> 
 
<th>Titre1</th> 
 
<th>Titre2</th> 
 
<th>Titre3</th> 
 
</tr> 
 
</thead> 
 
<tbody> 
 
<tr> 
 
<td>contenu1</td> 
 
<td>contenu2</td> 
 
<td>contenu3</td> 
 
</tr> 
 
</tbody> 
 

 
</table>
javascript函數

每次用戶刪除一個字符時,如何避免重複alert顯示?

編輯:

我試圖避免重複「警報」沒有鬆動的用戶後刪除一個字符驗證。

+0

可能重複[簡單的油門在js](https://stackoverflow.com/questions/27078285/simple-throttle-in-js) –

回答

3

如果要使用onkeyup忽略刪除和退格,可以將此檢查添加到函數的開頭:

function myFunction(event) { 
    // capture what key was pressed 
    var key = event.keyCode || event.charCode; 

    if(key === 8 || key === 46) 
     return; //if it's del or backspace, exit the function 

    // continue your function here 
} 
1

您可以實現在按下鍵的功能檢測驗證...

function myFunction(e) { 
 
    if(e.keyCode !== 8){ // back key excluded 
 
     var input, filter, table, tr, td, i; 
 
\t \t \t \t var cpt = 0; 
 
\t \t \t \t var nbRow = 0; 
 
\t \t \t \t input = document.getElementById("filterInput"); 
 
\t \t \t \t filter = input.value.toUpperCase(); 
 
\t \t \t \t table = document.getElementById("test"); 
 
\t \t \t \t thead = table.getElementsByTagName("tbody"); 
 
\t \t \t \t tr = table.getElementsByTagName("tr"); 
 

 
\t \t \t \t for (i = 0; i < tr.length; i++) { 
 
\t \t \t \t \t td = tr[i].getElementsByTagName("td")[2]; 
 

 
\t \t \t \t \t if (td) { 
 
\t \t \t \t \t \t nbRow = nbRow + 1; 
 
\t \t \t \t \t \t if (td.innerHTML.toUpperCase().indexOf(filter) > -1) { 
 
\t \t \t \t \t \t \t tr[i].style.display = ""; 
 
\t \t \t \t \t \t } else { 
 
\t \t \t \t \t \t \t tr[i].style.display = "none"; 
 
\t \t \t \t \t \t \t cpt = cpt + 1; 
 

 
\t \t \t \t \t \t } 
 
\t \t \t \t \t } 
 
\t \t \t \t } 
 
\t \t \t \t if (nbRow == cpt) { 
 
alert("The list is empty") 
 
\t \t \t \t } 
 
    } 
 
\t \t \t \t 
 
}
<input id="filterInput" onkeyup="myFunction(event)"> 
 
<table id="test"> 
 
<thead> 
 
<tr> 
 
<th>Titre1</th> 
 
<th>Titre2</th> 
 
<th>Titre3</th> 
 
</tr> 
 
</thead> 
 
<tbody> 
 
<tr> 
 
<td>contenu1</td> 
 
<td>contenu2</td> 
 
<td>contenu3</td> 
 
</tr> 
 
</tbody> 
 

 
</table>

當然,你必須添加代碼要排除

每一個關鍵
+0

你可能會在移動設備上遇到問題。也許最好檢查一下上次事件的字符串長度。 –

+0

它適用於手機的Firefox!你爲什麼不這樣想? –

+0

簡單而高效!只有一件事,當你刪除你失去了驗證! –

相關問題