У меня есть функция jQuery, которая запрашивает ввод пользователя, который имеет функцию обратного вызова для добавления текста в качестве нового элемента в экранном элементе select. Проблема заключается в том, что обратный вызов выполняется несколько раз (см ниже)jQuery callback работает несколько раз
GetText() метод показывает пользовательское всплывающее окно с входным элементом:
function getText(c, cb, elem) {
var cb = cb || false;
var elem = elem || false;
$("#lims_gettext_caption").html(c);
$("#lims_gettext").show();
$("#lims_gettext_respond").click(cb);
$("body").keyup(function(e){
if (e.keyCode == 27) {
$('#lims_gettext').hide();
$("body").unbind("keyup");
}
});
}
GetText() вызывается из отдельного метода, который запускается, когда пользователь нажимает на определенную ссылку на экране:
function PrepareScanner(row) {
var codes = $("#barcode" + row).size();
var txt = (codes == 1 ? "first" : "next");
getText("Please scan " + txt + " barcode", function() {
var bc = $("#lims_gettext_value").val();
$("#barcode" + row).append("<option value=1>" + bc + "</option>");
});
$("#lims_gettext_value").focus();
$("#lims_gettext_value").val("");
return;
}
Что, кажется, происходит в первый раз он работает все хорошо, и один элемент добавляется в список. Когда он запускается второй раз, добавляются два элемента, когда он запускается в третий раз, добавляются три элемента и т. Д. Значения добавленных элементов правильны (т. Е. Значение поля ввода на экране), я просто не могу понять, почему обратный вызов работает несколько раз.
Буду признателен за любую помощь. Я еще не смог найти что-то, что конкретно связано с этой проблемой на S.O.
Благодаря
скорее всего т его событие связано несколько раз. Сколько раз выполняется 'PrepareScanner'? –
Только один раз, насколько я могу судить. Scan –
Установите оповещение или console.log внутри, чтобы подтвердить. Я не вижу другого способа, чтобы его вызывали не один раз. –