拦截按钮上的点击事件,要求确认,然后继续
基于变量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的上述答案非常相似