有没有办法只让listitem的内部元素
做一点事?
做一点事?
我有列表元素,可以包含具有某个类的标签.
内部标签绑定到实时点击事件处理程序.列表项本身也有一个单击事件处理程序.
像这样的东西
<li>some text<a class="someClassName">some text</a></li>
使用a标签的处理程序
$('#somelist li a').live("click",function(e)
这就是如何添加li项目的事件
$(markers).each(function(i,marker){ $("<li />") .html("Locatie "+'<a class="ol id"><strong>'+ids[i]+'</strong></a>') .click(function(e){ showLocation(marker,i); }) .appendTo("#somelist ");
解决方法
jQuery中的live方法通过事件委托来工作,这是将所有冒泡事件从单个元素捕获到共同祖先(在您的情况下是其文档)的行为.
停止click事件的传播/冒泡会发生在处理程序元素(它是共同的祖先,而不是元素本身)上,并且存在于您试图避免的li之上.
所以当调用stopPropagation方法时,我们已经遍历了dom并传递了li元素.
它基本上是在交叉口后200英尺处设置一个停车标志.
所以你要么需要使用bind和stopPropagation,要么找到不同的解决方案.
这是我正在谈论的一个例子:http://jsbin.com/ibuxo(检查控制台)
你可以在http://jsbin.com/ibuxo/edit看到代码或编辑它
我建议的解决这个问题的方法是使用bind而不是live.
这需要你做一些额外的工作,但这并不是那么糟糕.
您可能正在使用直播,因为您正在添加新元素,并且您希望它们具有相同的功能.您应该在将它们输入到页面时绑定它们来执行此操作.这是一个例子
$(function(){ var myAnchorHandler = function(e){ alert('clicked!'); e.stopPropagation(); return false; }; // initial bind $('#somelist li a').click(myAnchorHandler); // code where you input more li elements to the list with links $('#somelist').append( // bind your function to the element now,and then append it $('<li><a>hi</a></li>').find('a').click(myAnchorHandler).parent() ); });
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。