jQuery - 似乎无法将.live()绑定到标签元素。为什么?

时间:2010-06-04 02:25:40

标签: javascript jquery label bind live

这是我的代码:

HTML:

<ul id="more-items">
   <li><label class="button">hi</label></li>
   <li><label class="button">hi</label></li>
   <li><label class="button">hi</label></li>
</ul>

使用Javascript:

$('ul#more-items label.button').live('click', function()
{
   alert(1);
});

单击标签不会导致警报()触发。 .live()绑定似乎对标签元素没有影响...

如果我将其更改为使用.click()甚至.bind(),它可以完美地运行。 是否有任何原因.live()不起作用?有办法解决这个问题吗?

我使用.live()的原因是因为ul#more-items将被多次读回页面,并且我不想每次重新绑定点击时都必须触发一个函数。

6 个答案:

答案 0 :(得分:6)

jQuery的live()方法依赖于事件冒泡(一直到根节点)才能工作。

如果有任何代码可以阻止事件在label或其任何祖先上冒泡,live()将无效。

label或其中一个祖先是否有机会拥有以下任何一种处理程序?

return false;

event.stopPropagation();

如果是这样,live()将失败。


相关的jQuery文档:

答案 1 :(得分:1)

元素ID必须是唯一的。你的原因“我使用.live()的原因是因为ul#more-items将被多次读回页面。”告诉我你将拥有多个这些:

<ul id="more-items"> 
  <!--Stuff-->
</ul>
<ul id="more-items"> 
  <!--Stuff-->
</ul>

这将是无效的HTML,因为ID more-items存在两次。

答案 2 :(得分:0)

$('label.button').live('click', function()
{
   alert(1);
});

$('ul#more-items').delegate('label.button','click', function()
{
   alert(1);
});

答案 3 :(得分:0)

似乎没问题,但你的警报应警惕(“1”);

或:

var 1 =“1”;

警报(1);

答案 4 :(得分:0)

你可以试试这个。它可能有用

变化:

$('ul#more-items label.button').live('click', function() 
{ 
   alert(1); 
}); 

To This:

$('ul#more-items label.button').unbind('click').live('click', function() 
{ 
   alert(1); 
}); 

答案 5 :(得分:-1)

您的代码适合我。您使用的是什么版本的jquery?你在$(document).ready函数中定义了javascript吗?