15-jquery 事件委托
事件委托就是利用事件冒泡原理,把事件加到父级上,通过判断事件来源的子集,执行相应的操作,事件委托首先可以极大减少事件绑定次数,提供性能;其次可以让新加入的子元素也可以拥有相同的操作。
一般绑定事件的写法:
有5个li,所以这个click()事件其实是绑定了5次,比较损耗性能
$(function(){ $ali = $("#list li"); $ali.click(function(){ $(this).css({background:'red'}); }) }) <ul id="list"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> </ul>
事件委托:
//delegate()中的第一个参数是被委托的子元素,第二个参数是委托的事件,第三个就是函数了
$('.list').delegate('li','click',function(){
...
})
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> .list{ background-color: gold; list-style: none; padding:10px; } .list li{ height:30px; background-color: green; margin:10px; } </style> <script src="js/jquery.js"></script> <script> $(function(){ /* //因为有8个li,所以这个click事件其实是绑定了5次,影响性能 $('.list li').click(function(){ $(this).css({background:'red'}) }) //下面是添加一个新的li到ul //1、由于ul中的8个li绑定click事件时,还没有这个li,所以这个li没有click的事件 //新建一个li元素赋值给变量$li var $li = $('<li>9</li>'); //2、为了让新加入的li有同样的事件,需要再单独绑定: $li.click(function(){ $(this).css({background:'red'}) }) //把新建的li元素放到ul子集的最后面 $('.list').append($li) */ //改成事件委托的方式: //将事件绑定到上级(ul)上,不论有多少li,都只邦一次 $('.list').delegate('li','click',function(){ //$(this)指的是每次委托的元素(li),不是ul $(this).css({background:'red'}) }) //而事件委托因为事件是绑定在父级上的,所以新添加的子元素依然有相同的事件 var $li = ('<li>9</li>') $('.list').append($li) }) </script> </head> <body> <ul class="list"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> </ul> </body> </html>

浙公网安备 33010602011771号