事件委托

今天写页面的时候 发现一个问题

就是在我动态的添加了 html 终于搞定样式统一之后

新增元素的JQ事件并没有得到响应

$(document).ready(function() {
    $.fn.mylive=function(eventType,fn){  
        var that=this.selector;  
        $(document).bind(eventType,function(event){  
            va
r
match=$(event.target).closest(that) if(match.length !== 0){ fn.apply($(event.target),[event]); } }) }

然后写了这么段代码 

之后下面就用 

$(".item").hide(); 
    $(".readItem").mylive('click',function(){
        $(this).parent().siblings('.item').slideToggle();
        
        });
  
    $('.confirmBtn').mylive('click',function(event){ 
    
      if(confirm("确定要删除么?")){
            $(this).parent().remove();
            
            }
        
          
    });  
    $('.addItem').mylive("click",function(){
        var newItem = $('<li class="count"></li>').html($('.count').html());
        
        $(".Itemlist").append(newItem);
        });

jq事件就得到了响应

但是具体为啥我也不是很清楚

然后 大概就是事件委托那里的内容

奇怪的是 网路上找的几种方式 如 .live()  .delegate() 等 

.live()用了没反应 

家遥说 我用了$(this)的原因

 

大概搞懂是怎么回事了

因为 给对象添加事件先于给把对象添加到dom树里面 

所以我通过找到父节点或者更上层的节点的方式 再用

event.target

来找到新增的那个对象
给其加上事件

 

由此想一下 之前没遇到问题前纯看书的时候

遇到的事件委托的用法

基本上是 比如 

<ul>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
</ul>

多个子节点的时候 用事件委托的方式到 ul 上面

$("ul").delegate("li","click",function(){/*显示更多信息*/});

就可以了...

昂~~~~~恍然大悟的感觉好开心噢 ~~~~
posted @ 2013-07-16 23:07  binarytree  阅读(176)  评论(0编辑  收藏  举报