【发布时间】:2017-09-26 18:25:57
【问题描述】:
我使用class='filt' 编写了这段代码,用于各种表格顶部的输入框,以允许根据这些输入过滤表格。当然,大多数输入都超过 1 个字母,所以我想添加一个计时器或类似的去抖动功能。下面的工作正常,但是当我添加计时器时,我开始得到一个
“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),但我不知道如何解决这个问题。
标签: javascript jquery filtering