Перехватите событие клика на кнопке, попросите подтверждение, затем продолжите
На основе переменной SomeCondition
мне нужно перехватить событие click на кнопке и запросить подтверждение, если они скажут ok, продолжить, иначе игнорировать нажмите.
Так что-то вроде:
if(SomeCondition) {
// disable click on button
var isOk = window.confirm("Are you sure?");
if(isOk) {
$("#button1").click();
}
}
Примечание: button1 уже подключен с событием click через javascript из внешнего .js файла, который я не могу изменить.
Я не знаю, как было связано событие клика, поэтому мне нужно отключить клик, если SomeCondition является истинным, а затем попросить подтверждения, а затем продолжить с кликом.
Ответы
Ответ 1
Процесс isOK ваш window.confirm в функции кнопки
$('#button1').click(function(){
if(window.confirm("Are you sure?"))
alert('Your action here');
});
Проблема, с которой вы столкнулись, - это щелчок, который уже произошел, когда вы запускаете свой "Are You Sure". Calling preventDefault не останавливает выполнение первоначального щелчка, если это тот, который запустил ваш оригинальный window.confirm.
Бит проблемы с курицей/яйцом.
Изменить: после чтения отредактированного вопроса:
var myClick = null;
//get a list of jQuery handlers bound to the click event
var jQueryHandlers = $('#button1').data('events').click;
//grab the first jquery function bound to this event
$.each(jQueryHandlers,function(i,f) {
myClick = f.handler;
return false;
});
//unbind the original
$('#button1').unbind('click');
//bind the modified one
$('#button1').click(function(){
if(window.confirm("Are You Sure?")){
myClick();
} else {
return false;
}
});
Ответ 2
С jQuery для предотвращения по умолчанию вы просто return false
:
$("#button1").click(function () {
//do your thing
return false;
});
Ответ 3
Для тех, кто ищет простое решение (не относящееся к указанному здесь особому условию)
Просто добавьте этот атрибут к кнопке:
.... , onclick = "return confirm('are you sure?')"
Когда поле подтверждения возвращает false, событие click отменяется.
Примечание. Обработчик onclick, явно упомянутый inline, переопределит любые другие привязки.
Ответ 4
Я не мог получить ни один из ответов выше, чтобы работать с помощью jquery 1.9.1
вот что работало для ранее установленного события click
var elem = $('#button1');
var oldClick = $._data(elem[0], 'events').click[0].handler;
elem.off('click');
elem.click(function(){
if(window.confirm("Are You Sure?")){
oldClick();
} else {
return false;
}
});
очень похож на Джейсона Бенсона ответить выше