2013-06-09 3 views
0

У меня есть большой набор данных с примерно 10 000 записей. Я хочу иметь механизм фильтрации в этом наборе данных. Это в основном выполняет выражение LIKE sql в поле и возвращает результаты сопоставления.Фильтрация с большим набором данных

Для этого я использовал JQuery для привязки события «ввода» в текстовом поле фильтра к моей функции обработчика фильтра.

Проблема в настоящий момент заключается в том, что если в текстовое поле одновременно нажимается одна клавиша, функция фильтра вызывается много раз, поэтому многие вызовы SQL для фильтрации очень неэффективны.

Есть ли способ, который я могу обнаружить в моем обработчике, когда пользователь закончил набирать текст или когда есть промежуток определенного периода времени и только затем выполняется фильтрация? Поэтому я делаю только один вызов базы данных, когда нагрузки символов сразу вводятся. Если символы вводятся медленно, хотя я хочу, чтобы каждый раз мог фильтровать.

Cheers.

ответ

0

Вот способ сделать это jsfiddle

var test = 0; 

$('body').on('keyup','input',function(){ 
    var val = $.trim($(this).val()); 
    test++; 

    if(val !== ""){ 
     doSomething(test); 
    } 
}); 

function doSomething(t){ 

    setTimeout(function(){ 
     if(t === test){ 
      //Place to Call the other Function or just do sql stuff 
      alert($.trim($('input').val())); 
     } 
    },500); 
} 

Существует глобальная переменная, чтобы проверить против, если пользователь ввел другую букву. И функция setTimeout ждет 500 мс, чтобы увидеть, написали ли они другую букву.

Я уверен, что есть лучшие способы сделать это, но, вероятно, вы начнете.