js动态绑定事件小结

<body><p>第1行内容</p> <p>第2行内容</p> <p>第3行内容</p> </body>

原生:

<script> var appendhtml=document.createElement("p"); appendhtml.innerHTML="这是插入的内容"; document.body.appendChild(appendhtml); var nodep=document.getElementsByTagName("p"); for (var i=0;i<nodep.length;i++){ nodep[i].onclick=function(){ console.log("Click Event!"); } } </script>

注:事件绑定需在创建节点之后,如在创建之前绑定则无法获取新创建的节点;

<body>

<div id="treeList">

<div class="canvas"></div>

</div>

</body>

jQuery:

第一种:将pdom添加到canvas标签中后设置属性和绑定事件

var pdom='<p>hehe</p>'

$(pdom).appendTo('#treeList .canvas').css('background','red').click(function (e) {

console.log(e);

console.log($(this).text()); //直接获取当前元素的内容

})

第二种:待新元素创建好后获取所有元素绑定元素;

$('p').click(function (e) {

console.log(e);

})

第三种:事件委托,利用事件冒泡在父元素执行delegate函数

$('#treeList .canvas').delegate('p','click',function (e) {

console.log(e.currentTarget.innerHTML);

})

第四种:事件委托,利用事件冒泡在父元素执行on函数

$('#treeList .canvas').on('click','p',function (e) {

console.log(e.currentTarget.innerHTML);

})

第五种:bind方法和live方法(因jQuery版本不同,可能其中的方法不存在,1.7之后的版本基本都被on方法替代了)

$('p').bind('click', function() {

console.log($(this).text());///注意,用live还可以这样写,结果是正常的

console.log("haha");

});

第六种:在元素中拼接方法(不建议传参!)

$("<li onclick='show()'>Hello</li>").appendTo("#d2");

function show() {

            alert($(this).text());///这样打印出的是空的,没有任何东西,但是方法是会触发的(不能这样打印自己)

            alert("哈哈");

        }

猜你喜欢

转载自blog.csdn.net/sinat_41680914/article/details/84134550