2017-10-12 11 views
2

Bonjour, Je suis en train de développer une fonction javascript qui faire un peu de vérification à chaque fois un changement d'entrée (j'utilise événement onkeyup) sauf si nous supprimons ce que nous entrons à l'intérieur de l'entrée ici est mon code réelexiste-t-il un moyen d'implémenter l'événement keyup sauf une clé?

\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>
Comment puis-je éviter un affichage répétitif alert chaque fois qu'un utilisateur supprime un caractère?

EDIT:

J'essaie d'éviter une « alerte » répétitive sans perdre la vérification après que l'utilisateur supprimer un caractère.

+0

Possible duplicate de [Simple throttle in js] (https://stackoverflow.com/questions/27078285/simple-throttle-in-js) –

Répondre

3

Si vous voulez ignorer la suppression et le retour arrière avec onkeyup, vous pouvez ajouter cette vérification au début de votre fonction:

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

Vous pouvez implémenter une validation dans la détection de fonction qui touche a été pressée ...

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>

Bien sûr, vous devez ajouter le code pour chaque clé que vous voulez exclure

+0

Vous rencontrerez probablement des problèmes sur les appareils mobiles. Peut-être mieux vérifier la longueur de la chaîne du dernier événement. –

+0

Cela fonctionne bien sur firefox pour mobile !! pourquoi ne pensez-vous pas? –

+0

Simple et efficace! Juste une chose, quand vous supprimez vous perdez la vérification! –