如何防止父的onclick被调用
问题描述:
说我有一个输入如何防止父的onclick被调用
<a href="/somepage.html" id="somePage" onclick="actionTaken();"/>
现在我有产生额外的附加jQuery的事件处理程序。
$("#somePage").click(function(event) {
// this needs to be executed before the default "actionTaken();" event.
if (validationFail()) {
// prevent the onclick event and link from going through.
event.preventDefault();
event.stopPropagation();
}
});
在我看来,父母的行为仍在运行。
答
您可能需要运行unbind()
删除先前指定的处理程序(它们不是的父母,他们只是其他处理程序):
$("#somePage").unbind("click");
$("#somePage").click(function(event) {
// this needs to be executed before the default "actionTaken();" event.
if (validationFail()) {
// prevent the onclick event and link from going through.
event.preventDefault();
event.stopPropagation();
}
});
答
出现这种情况的原因是,无论是内联onclick
和jQuery click
事件处理程序在点击链接的同时触发。您可以考虑嵌套click
事件处理程序中的actionTaken
功能,像这样:
function actionTaken(){
...
}
$('#somePage').click(function(e){
if (validationFail() !== true){
actionTaken();
}
});
我希望这有助于!
+0
不能做到这一点。 actionTaken从JSF框架生成 –
答
其实我的答案是一定的相关性安德烈
var somePage, handler;
somePage = $("#somePage");
if (somePage.length) {
handler = somePage.prop("onclick");
somePage.removeProp("onclick");
somePage.click(function(event) {
// this needs to be executed before the default "actionTaken();" event.
if (validationFail()) {
// prevent the onclick event and link from going through.
event.preventDefault();
event.stopPropagation();
}
});
somePage.click(handler);
}
想到的是要仔细检查'validationFail'返回你所期望的第一件事。您可能还需要'返回false'来阻止链接导航,和/或删除可能已分配的其他处理程序。 – brichins
难道你不能只在你的jQuery脚本的点击处理程序中调用actionTaken,而不是根本没有内联事件? –
actionTaken是由JSF(javaserver faces)生成的一些随机代码 –