Я хочу попросить пользователя подтвердить удаление строки таблицы. Если они говорят «да», то я хочу использовать метод jquery fadeOut() в строке таблицы с заданной продолжительностью и обратный вызов для удаления строки таблицы после завершения затухания.Использование .confirm() условно для вызова jquery .fadeOut() с длительностью messes up time of callback
Это нормально работает без подтверждения, но подтверждение добавляет странное и непоследовательное поведение. Если я сразу же попаду в «ОК», он будет работать так, как ожидалось. Но если я подождал несколько секунд, прежде чем нажать «ok», пропущенность иногда пропущена, и это займет несколько секунд до удаления строки. Это непоследовательно, и иногда мне нужно сначала сделать что-то еще (например, добавить строку), а затем получить поведение с ошибкой (см. Демонстрационную ссылку ниже). Кроме того, если я загружаю страницу как iframe в Facebook, например, я получаю эту проблему каждый раз.
Я думал, что это как-то связано с асинхронным и прогрессивным кодированием и попыталось изменить мой код, чтобы вызвать fadeOut в качестве обратного вызова из настраиваемой функции подтверждения, но это ничего не решило. Вероятно, я не сделал это правильно. Если не будет запрошено, я не буду публиковать этот код, чтобы избежать путаницы. Я также думал, что это может иметь какое-то отношение к очереди событий jquery или контексту выполнения, но я не знаю достаточно, чтобы понять/отладить это.
Итак, вот фрагмент моего кода, где проблема. Обратите внимание, что он работает нормально, если я вынимаю подтверждать, или если я вывезти FADEOUT и использовать только удалить:
// 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.
Благодарим за помощь! Я собираюсь в кругах по этому поводу, и это так расстраивает.
Кто-нибудь еще? Еще одна странная вещь, которую я заметил, заключается в том, что иногда, когда она «застревает», мне нужно сделать что-то вроде прокрутки страницы до того, как строка исчезнет. – Jeff