Я хочу попросить пользователя подтвердить удаление строки таблицы. Если они говорят «да», то я хочу использовать метод jquery fadeOut () для строки таблицы с заданной продолжительностью и обратным вызовом для удаления строки таблицы после завершения затухания.
Это прекрасно работает без подтверждения, но подтверждение добавляет странное и противоречивое поведение. Если я сразу нажму "ОК", то это сработает, как и ожидалось. Но если я подожду несколько секунд, прежде чем нажать «ОК», иногда пропадание пропускается, а затем удаление строки занимает несколько секунд. Это несовместимо, и иногда мне нужно сначала сделать что-то другое (например, добавить строку), а затем я получаю ошибочное поведение (см. Демонстрационную ссылку ниже). Кроме того, если я загружаю страницу как iframe в Facebook, например, я получаю проблему каждый раз.
Я думал, что это как-то связано с асинхронным или прогрессивным кодированием, и пытался изменить свой код так, чтобы он вызывал fadeOut в качестве обратного вызова из настроенной функции подтверждения, но это ничего не решало. Вероятно, я не сделал это должным образом. Если не будет запрошено, я не буду публиковать этот код, чтобы избежать путаницы. Я также подумал, что это может быть связано с очередью событий jquery или контекстом выполнения, но я не знаю достаточно, чтобы понять / отладить это.
Итак, вот фрагмент моего кода, где проблема. Обратите внимание, что он работает нормально, если я вынимаю подтверждение или вынимаю fadeOut и просто использую команду remove:
// handler to remove question (uses "on" to bind event to future added rows)
$("#questions").on("click",".removeQuestion", function(){
if (confirm('Are you sure you want to remove this question?')) {
// be sure to leave one question to fill in
if ($("table#questions tr").length == 1) {
$(this).parents("td").find("textarea").val('');
$(this).parents("td").find("input[type=radio]").attr('checked', false);
}
else {
$(this).parents("tr").fadeOut(300, function() {
$(this).remove();
});
// update total questions text
$(".total_questions").text(function(index, text) {
return parseInt(text)-1;
});
}
}
});
Вот ссылка на демонстрационную страницу, где вы можете попытаться продублировать ошибку (вам, возможно, придется поиграть с ней - см. Заметки выше о несоответствиях - первые несколько попыток часто работают отлично) и просмотреть весь источник:
https://xcitemediacustomfacebookpages.com/hebetsmccallin/admin_test.php
Кстати, я тестирую его на Chrome на Mac.
Спасибо за вашу помощь! Я ходил кругами на этот, и это так расстраивает.