.live() 方法能对一个还没有添加进DOM的元素有效,是由于使用了事件委托:绑定在祖先元素上的事件处理函数可以对在后代上触发的事件作出回应。传递给 .live() 的事件处理函数不会绑定在元素上,而是把他作为一个特殊的事件处理函数,绑定在 DOM 树的根节点上。 .live() 虽然很有用,但由于其特殊的实现方式,所以不能简单的在任何情况下替换 .bind()。因此建议方法是通过元素中的onmouseover进行方法执行,这样子最为安全和可靠。$(".product_Simgs ul li").remove(); for (var i = 1; i <= parseInt($(this).attr("imgnum")); i++) { var li = "<li onmouseover='test()'><span>" + i + "/" + parseInt($(this).attr("imgnum")) + "</span></li>"; $(".product_Simgs ul").append($(li)); }
$(".product_Simgs ul li").mouseover(function () { test(); }); function test(){ alert("over"); }
.live() 虽然很有用,但由于其特殊的实现方式,所以不能简单的在任何情况下替换 .bind()。因此建议方法是通过元素中的onmouseover进行方法执行,这样子最为安全和可靠。$(".product_Simgs ul li").remove();
for (var i = 1; i <= parseInt($(this).attr("imgnum")); i++) {
var li = "<li onmouseover='test()'><span>" + i + "/" + parseInt($(this).attr("imgnum")) + "</span></li>";
$(".product_Simgs ul").append($(li));
}
$(".product_Simgs ul li").mouseover(function () {
test();
});
function test(){
alert("over");
}
况且,代码中前面的for明明append了新创建的li,所以为什么要用live呢?
$(".product_Simgs ul li").live({
mouseenter: function () {
alert("over");
}
});
上面的说法是对的,只是没有考虑到 live支持的事件不包括 mouseover ,hover
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
$(".product_Simgs ul li").on('mouseover',function () {
alert("over");
});
</script>
一样不行!
function test(){
alert("over");
}
必须注册先