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

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

所以类似于:

 if(SomeCondition) { // disable click on button var isOk = window.confirm("Are you sure?"); if(isOk) { $("#button1").click(); } } 

注意:button1已经通过javascript从外部.js文件连接点击事件,我无法更改。

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

处理是你的窗口。在按钮的function内确认

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

您将遇到的问题是,当您触发“您确定”时,已经发生了点击。如果是启动原始窗口的那个,则调用preventDefault不会停止执行原始点击。确认。

一点鸡/蛋问题。

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

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

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

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

对于那些正在寻找简单解决方案的人(不是特别针对此处提到的特殊情况)

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

 .... , onclick = "return confirm('are you sure?')" 

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

我无法使用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的上述答案非常相似