После некоторой отладки кажется, что код после каждой инструкции выполняется до того, как каждая из них завершена.
Я также заметил, что каждая функция работала дважды.
Вот что происходит:
- Нажмите на элемент #ProductsSubmit
- Оповещение всплывает с сообщением: «Событие сработало» - (Событие щелчка #ProductSubmit срабатывает только один раз. Окно предупреждения появляется только один раз.)
- Используя Firefox Firebug, я вижу, что функция get вызывается 4 раза. Есть только 2 элемента .AddProduct. Просматривая URL-адрес, содержащий идентификаторы захваченных элементов, я вижу, что функция .each () циклически повторяется дважды, но помните, что событие нажатия #ProductSubmit вызывается только один раз.
- Первое предупреждение (ErrorFound) появляется со значением 0. Я проверил, что обратный вызов get вызывает оператор if (VerifyData ['Valid']! = 'Yes'). Таким образом, оператор if верен 100% времени (для отладки)
- Задан тайм-аут. Всплывающее окно оповещения показывает предупреждение (ErrorFound) как 1.
Таким образом, похоже, что предупреждение (ErrorFound) запускается до того, как ErrorFound будет установлен в 1 в каждом операторе. Но когда я добавляю задержку, он, кажется, догоняет и показывает, какое значение должно быть, которое равно 1.
var ErrorFound;
$(document).ready(function(){
$(document).delegate("#ProductsSubmit", 'click', function(){
alert('Event Triggered');
ErrorFound = 0;
$(".AddProduct").each(function(){
var IDToConfirm = $(this).attr('id');
var SKUToConfirm = $(this).val();
$("#"+IDToConfirm).removeClass("InputError");
$.get('http://www.example.com/script.php?s='+SKUToConfirm+'&ut='+IDToConfirm, function(data) {
var VerifyData = jQuery.parseJSON(data);
if(VerifyData['Valid']!='Yes') { ErrorFound = 1; $("#"+VerifyData['ID']).addClass("InputError"); }
});
});
// Alert box shows value as 0
alert(ErrorFound);
setTimeout("AlertError()", 5000);
return false;
});
});
function AlertError() {
// Alert box shows value as 1
alert(ErrorFound);
}
Что происходит? Я пробовал так много обходных путей, но не нашел ни одного, который бы работал.