Javascript event.stopPropagation()出现故障(&;onClick(jQuery)

Javascript event.stopPropagation()出现故障(&;onClick(jQuery),javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,我几年前写过这段代码,当时它在FF&Chrome中工作,但现在,它在Chrome中产生了无限循环 <script> function clickChildLink(el, event) { console.log('inside function'); var evtTarget = $(event.target); if (evtTarget.is('a')) { console.log('return

我几年前写过这段代码,当时它在FF&Chrome中工作,但现在,它在Chrome中产生了无限循环

<script>
    function clickChildLink(el, event) {
        console.log('inside function');
        var evtTarget = $(event.target);
        if (evtTarget.is('a')) {
            console.log('returning');
            return; //ignore clicks if its a link
        }
        $(el).children('a').click();
}
</script>

<div onclick="clickChildLink(this, event);">  
    <a href="#" onclick="console.log('before'); event.stopPropagation(); console.log('after'); return false;">Header</a>
</div>  

函数clickChildLink(el,事件){
log(“内部函数”);
var evtTarget=$(event.target);
if(evtTarget.is('a')){
console.log('returning');
return;//如果是链接,则忽略单击
}
$(el).children('a')。单击();
}
您可以在此处运行代码:

基本上,它应该做的是,如果用户在div(即标题)内单击,它会在其中找到链接,并调用对它的单击。在Chrome上,调用的点击也会传播回父级,父级又会再次启动整个过程

我知道我应该使用不那么显眼的javascript,但这源于一个旧的rails应用程序(希望很快就能升级)


你知道为什么这个事件没有停止传播吗?从技术上讲,代码应该在没有stopPropagation调用的情况下工作,因为函数中的if语句应该阻止后续调用的触发。显然,当通过编程方式调用click时,Chrome不会更新currentTarget,如果只有一个子锚点,那么您可以不执行以下操作吗

$(el).click(function(){
    if (this.tagName !== 'A') 
        this.getElementsByTagName('A')[0].click();
});
或者我猜如果它嵌套在更深的地方

$(el).click(function(){
    if (this.tagName !== 'A') 
        $('a', this)[0].click();
});

看起来这是由内联附加的事件处理程序引起的。如果您使用jQuery、onDomReady附加它们,它应该可以工作,而且更好的是跨浏览器(您当前的脚本在IE中无法正常工作,我可以看到一件事:Firefox将事件视为属于
a
元素,而Chrome相信它属于
div
。以下是控制台中显示
事件的相同代码;我还停止循环以保存理智
;)
。谢谢Jared…事后看来,我看到代码可能有点烦人。我不确定当您以编程方式调用click事件时,Chrome为什么不更新目标。谢谢…这最终起到了作用…奇怪的是,事件中的currentTarget是使用此方法正确更新的。
$(function(){

    $(div).click(function(){
        $(this).children('a').click();
    });

    $(a).click(function(e){
        e.stopPropagation();
    });

});