Я использую следующий код для фильтрации таблицы на основе ввода из текстового поля. В любой другой браузер я не получаю такую ошибку, но на 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());
});
});
Я ни в коем случае не яваскрипт эксперта, так что все помощь приветствуется!
UPDATE: Оказывается, это был прокрутки вверх метод JQuery, заменила его шоу, и все это было установлен
Я добавил оба ваших изменения, и я уверен, что они действительно помогли эффективности, поэтому спасибо за это. Однако кажется, что ошибка все еще происходит. Небольшая отладка обнаружила, что это происходит только тогда, когда я удаляю весь текст сразу (т. Е. Выбираем все обратное пространство). Однако, когда я медленно нажимаю назад после каждого символа, ошибка не возникает. Я вызываю эту функцию, используя onkeyup в текстовом поле –