这是我的代码:
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
将被多次读回页面,并且我不想每次重新绑定点击时都必须触发一个函数。
答案 0 :(得分:6)
jQuery的live()
方法依赖于事件冒泡(一直到根节点)才能工作。
如果有任何代码可以阻止事件在label
或其任何祖先上冒泡,live()
将无效。
label
或其中一个祖先是否有机会拥有以下任何一种处理程序?
return false;
或
event.stopPropagation();
如果是这样,live()
将失败。
相关的jQuery文档:
.live()
- http://api.jquery.com/live/ .stopPropagation()
- http://api.jquery.com/event.stopPropagation/ 答案 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吗?