有没有一种方法来实现keyup事件除了一个键?

问题描述:

你好,我试图开发做一些验证,每次输入的变化(我使用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://*.com/questions/27078285/simple-throttle-in-js) –

如果要使用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 
} 

您可以实现在按下键的功能检测验证...

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

简单而高效!只有一件事,当你删除你失去了验证! –