2013-04-10 48 views
2

正如标题中所述,我与我的JS有一些问题。jquery单击内点击导致多次递归错误

JS:

$("#bg2InsideFb").click(function() { 
     $("#fbLink").click(); 
    }); 

HTML:

<div id="bg2InsideFb"> 
    <p id="fbIcon"> 
     <img src="@routes.Assets.at("images/mobile/login/fblogin-ico.png")" alt="Facebook"/> 
    </p> 
    <p class="pl20"> 
     <a id="fbLink" href="@fb.authenticationUrl"> @Messages("review.form.facebook.login") </a> 
    </p> 
</div> 
<p class="floatleft f13"> 
    @Messages("review.form.facebook.term") 
</p> 

这导致Chrome崩溃和Firefox扔太多递归误差。发生了什么,我该如何解决这个问题?

回答

2

好吧,我这样做,因为传播解决方案不适合我。

$(function() { 
     $("#bg2InsideFb, #bg2InsideG").click(function() { 
      var tmpLink = $(this).find("a").attr("href"); 
      window.location.href = tmpLink; 
     }); 
    }); 
4

以编程方式点击#fbLink这是#bg2InsideFb内的元素。事件冒泡导致非常相同的点击以影响后面的元素,然后触发另一次点击。为了防止这种情况,你需要勾侦听器,以防止其传播这样的内部元件:

$('#fbLink').click(function(jqEvt) { 
    jqEvt.stopPropagation(); 
} 

jQuery API on event.stopPropagation

+0

嗯我添加了你的代码,现在没有错误,但没有任何反应。我想我错过了什么? – jakob 2013-04-10 10:16:51

+0

@jakob我甚至不知道它应该做什么。既然它是一个链接,我认为应该加载新的内容。你的新代码是什么? – Kiruse 2013-04-10 10:28:34

+0

是的你是对的。新的内容应该被加载。代码和以前一样,只是将stopPropagation代码添加到js文件中。 – jakob 2013-04-10 10:55:03

0

我假设你想触发#fbLink。在这种情况下,你必须使用

$('#fbLink').click(function(ev) { 
    ev.stopPropagation(); 
}); 
$('#fbLink').triggerHandler('click');`` 
+2

不,触发器仍会导致冒泡。我认为你的意思是.triggerHandler(),但这仍然不能很好地回答OP – Benubird 2013-04-10 09:56:02

+0

我的错,是的,我的意思是'triggerHandler()'。谢谢你纠正我。 – Chris 2013-04-10 09:56:56

0

当你调用$("#fbLink").click();它实际上调用其父母也。这就是为什么它导致递归错误。你能解释一下你想做什么吗?

$("#bg2InsideFb").click(function() { 
    $("#fbLink").click(function(){ 
     return false; 
    }); 
}); 

它可能有效。