Подтвердить что ты не робот

Перехватите событие клика на кнопке, попросите подтверждение, затем продолжите

На основе переменной 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 является истинным, а затем попросить подтверждения, а затем продолжить с кликом.

4b9b3361

Ответ 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;
  }
});   

очень похож на Джейсона Бенсона ответить выше