如何防止父的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(); 
    } 
}); 

在我看来,父母的行为仍在运行。

+0

想到的是要仔细检查'validationFail'返回你所期望的第一件事。您可能还需要'返回false'来阻止链接导航,和/或删除可能已分配的其他处理程序。 – brichins

+1

难道你不能只在你的jQuery脚本的点击处理程序中调用actionTaken,而不是根本没有内联事件? –

+0

actionTaken是由JSF(javaserver faces)生成的一些随机代码 –

您可能需要运行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); 
}