さまざまなテーブルの上部にある入力ボックスにこのようなコードを書き込んで、class='filt'
を使用して、これらの入力に基づいてテーブルをフィルタリングできるようにしました。もちろん、ほとんどの入力は1文字以上ですので、タイマーや同様のデバウンス機能を追加したかったのです。以下のエラーsetTimeoutを使用したときの名前が未定義
正常に動作しますが、私はタイマーを追加したとき、私は
。何か案は?を取得し始めた「e.nodenameが未定義である」
<script>
var typingTimer;
var doneTypingInterval = 1000;
$('.filt').on('keyup', function() {
var children = $(this).parent().parent().find("input");
clearTimeout(typingTimer);
typingTimer = setTimeout(function() {
$("#table1 tbody tr").show();
for (var i = 0; i < children.length; i++) {
var tableChild = children[i];
if (tableChild.value) {
var valarr = tableChild.value.split(",,"); //multiple filter separator
for (var az = 0; az < valarr.length; az++) {
if (valarr[az].charAt(0) == '~') { //negation operator
var val2 = valarr[az].substr(1);
$("#table1 tbody tr:not(:not(:has(td:eq(" + tableChild.id + "):contains('" + val2 + "'),td:eq(" + tableChild.id + ") [value*='" + val2 + "'])))").hide();
} else { //standard filter
$("#table1 tbody tr:not(:has(td:eq(" + tableChild.id + "):contains('" + valarr[az] + "'),td:eq(" + tableChild.id + ") [value*='" + valarr[az] + "']))").hide();
}
}
$("#table1 tbody tr").eq(0).show();
}
}
$(this).focus(); //annoying extra code for MS browsers
var thistext = $(this).val();
$(this).val('').val(thistext);
}, doneTypingInterval);
});
</script>
誰もその厄介なコードを検索したくありません。それを一掃してください、または少なくともエラーがある行番号を教えてください。 –
私は問題を理解したと思う。それは最後に迷惑なMSのブラウザコードです。それは$(this)を参照していますが、私はそれを回避する方法がわかりません。 – Bobert123