当我不想要它时,jquery .click覆盖主播href!
我有一组嵌套的DIV,当用户点击它们时,使用jQuery进行滑动。 在最里面的DIV内部有一个带有HREF的锚标签,它应该在某个地方导航。 问题是,当我点击链接时,它就像父DIV一样滑动,而不是导航到url。 如果我右键单击锚点并选择在新选项卡中打开,那么导航就可以了。 请问你能发现什么问题吗? 谢谢
ThirdParty
Bobs shop
Gifts
$("div.subSystemHeader, div.subSystemHeader").click(function() { $("> div", this).slideToggle(...); return false; });
这里有一些变化,没有必要重复相同的选择器,并检查事件是否来自标签,如下所示:
$("div.subSystemHeader").click(function(e) { if(e.target.nodeName == 'A') return; //skip this handler, don't return false $("> div", this).slideToggle(...); return false; });
你可以在这里测试一下 。 如果事件目标来自 (没有它的子项),那么我们只是退出处理程序,返回
undefined
,因为我们没有显式返回false
, click
事件会正常进行…转到href
。
您可以检查点击的事件对象,然后检查事件目标 – 另请参阅http://api.jquery.com/event.target/
$("div.subSystemHeader, div.subSystemHeader").click(function(event) { if(event.target.nodeName.toLowerCase() == 'a') return; ... }
(没有测试它,但它应该工作)
你的问题是return false;
这阻止了默认行为。
$("a:eq(0)").click(function() { return false; /* does nothing */ }); $("a:eq(1)").click(function() { /* go to href */ });
- 关于jsFiddle的示例
我今天刚遇到这个问题。 我发现了一篇非常有趣的文章可能有所帮助。 它描述了’return false’和Jquery事件的错误(使用)( http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/ )。 我没有在您的示例中测试以下代码,但我认为这应该可行。
$('.subSystemHeader a').click(function(e){ e.stopPropagation(); });