我正在使用下面的代碼來過濾基於文本框輸入的表。在其他瀏覽器我沒有收到這樣的錯誤,但在IE 8(沒有較低測試)我收到錯誤:IE 8,Jquery操作堆棧溢出
Out of stack space Line 4 character 26207 jquery.min.js
下面是我當前的代碼導致了問題:
var timeout;
function sort(){
clearTimeout(timeout);
var value = document.getElementById('searchBarText').value;
timeout = setTimeout(
function(){$("#searchTable tr").each(function() {
var id = " "
$row = $(this);
$row.each(function(i) {
$("td", this).each(function(j) {
id+="".concat($(this).text());
});
});
id = id.replace(/\s+/g, ' ');
id = id.replace(/(\d+)/g, '');
if (id.toLowerCase().indexOf(value.toLowerCase()) == -1) {
$row.hide();
if(value.length < 3){
$("#searchBarText").css('border', '2px red solid')
}else{
$("#searchBarText").removeAttr('style')
}
}
else if(value!="" &&value.length >= 3) {
$("#searchBarText").removeAttr('style')
$("#topTable").css('margin-top', '0px')
$("#searchIcon").css('color', '#26466D')
$("#searching").fadeIn();
$row.show();
}else{
if(value.length > 0){
$("#searchBarText").css('border', '2px red solid')
}else{
$("#searchBarText").removeAttr('style')
}
$("#searchIcon").removeAttr('style')
$("#searching").slideUp();
$("#topTable").css('margin-top', '-5px')
$row.hide();
}
})},400);
}
現在它發生的主要時間是當搜索查詢被清除時,這意味着所有的行都被放回表中。
我有一種感覺的低效是在這裏的某個地方:
$row = $(this);
$row.each(function(i) {
$("td", this).each(function(j) {
id+="".concat($(this).text());
});
});
我絕不是一個JavaScript的專家,所以所有的幫助表示讚賞!
更新:原來這就是向上滾動jQuery的方法,與展會替換它,這是所有設置
我添加了你的兩個修改,並且我確定他們確實幫助了效率,所以非常感謝。但是,似乎仍然發生錯誤。稍微調試發現,這種情況只發生在我一次刪除整個文本(即選擇全部退格)的情況下。但是,當我在每個字符後緩慢地按退格鍵時,錯誤不會發生。我在文本字段中使用onkeyup調用這個函數 –