超级赛亚人 2014-11-15
关于jquery动态创建节点并为节点添加事件时,如果直接在它们上面绑定事件是不行了,需要用bind(),live(),delegate(),on()等方法就行绑定,
对于为一个节点动态添加或改变class属性($("#a").attr("class",".b")或者$("#a").addClass("b"))后,也不能通过用该改变后的class来绑定事件,如:
$(".b").click(function(){});这样绑定的事件也是不起作用的,也得通过bind(),live(),delegate(),on()方法来绑定
但是可以通过改变后该class属性还获取该对象的一些属性值,如:
$(".b").text();或$(".b").val();这样是可以.
如果通过一个对象属性绑定了事件,之后又修改一下它的该属性的值,那么对该对象起作用的还是原来的属性值,而非改变后的值,如:
<divclass="aaa">abc</div>
$(function(){
$(".aaa").click(function(){alert("aaa");$(this).attr("class","aaa1");});
$(".aaa1").click(function(){alert("aaa1")});
});
当第一次点击class="aaa"的div时,程序会弹出"aaa",该div的class属性值会变为class="aaa1",然后第二次点击该div时候,程序依然会弹出"aaa",而不是弹出"aaa1",
所以,我们不难发现通过一个属性对节点绑定事件,无论该属性值是否发生变化,如果不特殊进行处理,程序对该节点记住还是它之前的属性值,通过改变后的属性值不能对该节点进行事件绑定!
总结:
1:对于动态创建节点绑定事件,需要用bind(),live(),delegate(),on()这些方法来进行绑定事件。
2:对于动态改变原有的节点的属性,用改变后的该属性绑定事件也需要用bind(),live(),delegate(),on()方法来绑定事件,但是却可以通过改变后的该属性来获取该对象或该对象的一些属性值!
3:通过一个属性对节点绑定事件,无论该属性值是否发生变化,如果不特殊进行处理,程序对该节点记住还是它之前的属性值,通过改变后的属性值不能对该节点进行事件绑定!
<table id="table" class="table table-striped table-bordered table-hover table-nowrap" width="100%&qu