#jquery
#jquery
Вопрос:
У меня есть строки, которые нужно удалить, деактивировать или пометить как прочитанные. Теперь для удаления и деактивации я показываю предупреждение в модальном окне bootbox, в то время как «пометить как прочитанное» не требует предупреждения. Есть три кнопки, которые запускаются с именем класса mass
:
$('.mass').click(function(e){
e.preventDefault();
var action = $(this).attr("data-action");
// see action and warn as necessary.
var goon = false; // decided to use goon to see if execution should continue or not, after my attempts without it failed
if (action == 'delete') {
//warn
bootbox.confirm('Sure Delete?' function(choice) {
goon = choice; //will be false or true
});
} else if (action == 'deactivate') {
bootbox.confirm('Deactivate?', function(choice) {
goon = choice;
});
} else { // we don't need warning
goon = true;
}
alert(goon); // to see
if (goon == false) {
return false;
}
//continue to server processing her
});
Теперь проблема в том, что alert(goon)
запускается до / при отображении модального окна перед щелчком cancel
или ok
. Это всегда false
. Весь if
блок, похоже, не имеет никакого эффекта. После нажатия кнопки Отмена или Ок он больше не запускается, потому что процесс уже выполнен.
Чего мне не хватает, пожалуйста?
Ответ №1:
Ваша логика ошибочна, поскольку вы ничего не делаете с возвращаемым значением из bootbox. Вместо этого вы немедленно проверяете goon
(который всегда будет находиться в состоянии по умолчанию false
) и продолжаете.
Чтобы исправить это, вы можете извлечь свою логику в функцию, которая вызывается только при взаимодействии с bootbox. Попробуй это:
$('.mass').click(function(e){
e.preventDefault();
var action = $(this).attr("data-action");
if (action == 'delete') {
bootbox.confirm('Sure Delete?' function(choice) {
choice amp;amp; performAction(action);
});
} else if (action == 'deactivate') {
bootbox.confirm('Deactivate?', function(choice) {
choice amp;amp; performAction(action);
});
} else {
performAction(action);
}
});
function performAction(action) {
// continue to server processing her
}
Комментарии:
1. Спасибо. Я никогда не знал этого способа. новичок, большое спасибо. Попробуем и посмотрим, что произойдет.
Ответ №2:
никогда не использовал bootbox, но из их документации:http://bootboxjs.com/documentation.html
bootbox.alert("Your message here…", function(){ /* your callback code */ })
javascript является асинхронным, ваш код не «ожидает» перед выполнением.
Я думаю, что вы хотите сделать, это переместить IF в блок обратного вызова. таким образом, оно будет оценено при закрытии предупреждения.