有没有办法只让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看到代码或编辑它
这需要你做一些额外的工作,但这并不是那么糟糕.
您可能正在使用直播,因为您正在添加新元素,并且您希望它们具有相同的功能.您应该在将它们输入到页面时绑定它们来执行此操作.这是一个例子
$(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() ); });