拦截按钮上的点击事件,要求确认,然后继续

时间:2011-01-12 22:57:30

标签: jquery

基于变量SomeCondition,我需要拦截按钮上的点击事件,并要求确认,如果他们说好,继续,否则忽略点击。

类似于:

if(SomeCondition) {

// disable click on button

var isOk = window.confirm("Are you sure?");

if(isOk) {
        $("#button1").click();
}

}

注意:button1已经通过外部.js文件中的javascript点击事件与我无法更改。

我也不知道点击事件是什么绑定的,所以如果SomeCondition为真,我必须禁用点击,然后要求确认,然后继续点击。

4 个答案:

答案 0 :(得分:40)

处理isOK你的window.confirm在按钮的功能

$('#button1').click(function(){ 
   if(window.confirm("Are you sure?"))
     alert('Your action here');
});

您将遇到的问题是,当您触发“您确定无误”时,已经发生了点击。如果启动原始窗口,则会阻止执行原始点击。确认。

有点鸡/蛋的问题。

编辑:阅读您编辑过的问题后:

    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;
        }
    });

答案 1 :(得分:2)

使用jQuery防止默认,你只需return false

$("#button1").click(function () {
    //do your thing
    return false;
});

答案 2 :(得分:2)

任何正在寻找简单解决方案的人(不是特别针对这里提到的特殊情况)

只需将此属性添加到按钮:

UIUserNotificationSettings

当确认框返回false时,点击事件将被取消。 注意:明确提到内联的onclick处理程序将覆盖任何其他绑定。

答案 3 :(得分:0)

我无法使用jquery 1.9.1

获得上述任何答案

这适用于之前设置的click事件

var elem = $('#button1');
var oldClick = $._data(elem[0], 'events').click[0].handler;
elem.off('click');

// Pass the original event object.
elem.click(function(e){
  if(window.confirm("Are You Sure?")){
    oldClick(e);
  } else {
    return false;
  }
});   

与Jason Benson的回答非常相似