我在div上有一个点击监听器,在div里面我有一个带有普通-tag的链接但是每当我点击链接时,事件也会运行。如果单击div中的链接,如何阻止点击侦听器中的内容运行?
HTML:
<div class="container item-container" data="skarp-version-av-os-x-10.8.3-slappt">
<div class="item">
<div class="number">
<p class="number-data">1</p>
</div>
<div class="upvotes btn tooltip-points" points="4" id="90" data-toggle="tooltip" title="" data-original-title="Visar poäng satta de senaste 24 h">
4 poäng
</div>
<div class="item-content">
<a href="http://feeds.idg.se/~r/idg/ETkj/~3/XSuYKgEiumE/skarp-version-av-os-x-1083-slappt" target="_blank" class="item-link fill-div">Skarp version av OS X 10.8.3 släppt</a>
<span class="item-source">(feeds.idg.se)</span>
<p class="item-author">Upplagd av Anonym - <em>2013-03-17 21:07:08</em></p>
</div>
<div class="comment">
<i class="icon-comment"></i> <a href="http://www.tldr.nu/item/view/skarp-version-av-os-x-10.8.3-slappt#disqus_thread">0 Comments and 0 Reactions</a>
</div>
</div>
</div>
使用Javascript:
$('.item-container').click(function(event) {
var url = $(this).attr('data') ? $(this).attr('data') : '';
if(url != '')
window.location = getBaseURL() + 'item/view/' + url;
});
答案 0 :(得分:2)
您可以在链接上添加一个事件处理程序来阻止click事件冒泡到div,或者您可以在div的处理程序中添加一个if语句,以便在事件目标为时忽略click事件链接。我认为前一种解决方案是可行的方法。
这会在链接上设置一个事件处理程序,阻止click事件传播到div:
$('.item-container a').click(function(event) {
event.stopPropagation();
});
答案 1 :(得分:1)
您需要将特定的预防方法绑定到内部元素,如此 -
$("a").click(function(e){
e.stopPropagation();
});
或者您需要嗅探点击元素的类型 -
$(".wrap").click(function(e){
if ($(e.target).hasClass("wrap")){
alert("click");
}
});
第二种方法通常更可取,因为要出现这个问题,你的内部元素会有你自己想要正常运作的事件。
但是,也许您希望链接在单击时不会触发父div效果,在这种情况下,第一个更好。
答案 2 :(得分:0)
$('.item-container').click(function(event) {
if(!$(event.target).is('a')) {
var url = $(this).attr('data') ? $(this).attr('data') : '';
if(url != '')
window.location = getBaseURL() + 'item/view/' + url;
}
});
检查发起事件的事件目标是否为锚元素,如果不是,则执行您的函数。
答案 3 :(得分:0)
熟悉Event Bubbling - 您需要了解最终了解Event Delegation的基础知识。
您可以通过以下两种方式之一解决问题。将点击事件绑定到<a>
中的<div>
并调用event.stopPropagation();
,或让<div>
的事件处理程序检查event.target
是否为{ {1}}元素:
<a>
答案 4 :(得分:0)
因为它“冒泡”。想想这样;
当您点击链接时,它会按照您的指定执行操作:导航到网址。 接下来,它“冒泡”树,你也有一个div的点击处理程序,所以它也试图运行它。
如果您还有$('body')
的点击处理程序也会被调用。
你必须停止冒充event.stopPropagation();
e.g。
$('#your-anchor-tag').click(function(e) {
e.stopPropagation();
}
这样,你就会停止冒泡过程..