Я немного поработал со свайпером, там есть похожие проблемы.Данные поступают в виде быстрой посылки, но не отправляется согласованная строка «конец данных».Решение состоит в том, чтобы использовать setTimeout
и ждать - когда ввод остановится, вы запускаете код обработки.
В зависимости от вашего оборудования, количество ожидаемого времени ожидания может варьироваться.Поэкспериментируйте с этим кодом, чтобы настроить время ожидания, просто измените аргумент duration
на setTimeout
.Я запустил его на 500 мс - это очень хорошо работает для картографов.Простите, если в моем коде есть какие-то незначительные колебания - я не парень jQuery:)
$(document).ready(function() {
$("#bcode")
.focus()
.attr('autocomplete', 'off')
.keyup(function(event){
// if the timer is set, clear it
if (barcode_watch_timer !== false)
clearTimeout(barcode_watch_timer);
// set the timer to wait 500ms for more input
barcode_watch_timer = setTimeout(function () {
process_barcode_input();
}, 500);
// optionally show a status message
//$("#status").html('waiting for more input...').show();
// return false so the form doesn't submit if the char is equal to "enter"
return false;
});
});
var barcode_watch_timer = false;
function process_barcode_input() {
// if the timer is set, clear it
if (barcode_watch_timer !== false)
clearTimeout(barcode_watch_timer);
// grab the value, lock and empty the field
var name = $("#bcode").val();
$("#bcode").attr('disabled', true);
// empty the status message
$("#status").empty();
// add a loading message
$("#status").html('<img align="absmiddle" src="images/loading.gif" /> Checking availability...').show();
// send the ajax request
$.ajax({
type: "POST",
url: "namecheck.php",
data : "bcode=" + name,
success: function(msg) {
// unlock the field, show a success status
$("#bcode").attr('disabled', false);
$("#status").html(msg).show();
}
});
}