2017-10-12 8 views
2

こんにちは、私はいくつかの検証が毎回我々は、入力内の入力した内容を削除する場合を除き、入力の変化が(私はイベントをonkeyupの使用しています)ここに私の実際のコードは、1つのキー以外のキーアップイベントで実装する方法はありますか?

\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関数を開発しようとしています

ユーザーが1文字を削除するたびに繰り返し表示されないようにするにはどうすればよいですか?

EDIT:

私は、ユーザー1つの文字を削除した後に検証を失うことなく、繰り返し「警告」を避けるためにしようとしています。もちろん

あなたはキーが押された機能検出で検証を実装することができます
+0

[Simple throttle in 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

シンプルで効率的!あなたがあなたが検証を失うことを削除するときにちょうど1つのこと! –

関連する問題