动态元素上的Jquery事件注册

时间:2011-05-07 01:03:05

标签: javascript jquery

我有一个像这样的事件处理程序注册代码

$("sel").each(function() {
        (function(a){
            var b = createb();          
            //do some more ops
            a.addEventListener('evttype',handler1(a, b),false);
            b.addEventListener('evttype',handler2(a, b),false);         
        })(this);
});

这将偶数'eventtype'与由(“sel”)选择的所有元素(a)绑定,并且还创建另一个元素(b)并绑定到它。当然,它仅适用于静态元素。现在我想注册所有动态创建的'a'。我读了这个live()和delegate()的两个API。我无法想办法使这项工作。

$('sel').delegate("a", "evttype", function(){
var b = createb();          
//do some more ops
b.addEventListener('evttype',handler2(a, b),false); 
});

代码错误,因为每次处理事件时都会创建一个'b'。这与第一个代码块不同。我只需要创建一次元素'b',并将同一个事件绑定到它们两个,然后分别处理它们。是否存在基于选择器匹配所有未来元素的接口,或者使用delegate()有一种简单的方法。

谢谢你的时间。 BSR。

2 个答案:

答案 0 :(得分:2)

完全符合http://api.jquery.com/live目的

答案 1 :(得分:0)

您应该在创建b元素之前检查它是否存在。

$('sel').delegate("a", "evttype", function(){
  if(!b_exists()){
    var b = createb();          
    //do some more ops
    b.addEventListener('evttype',handler2(a, b),false); 
  }
});

但是,为了给你b_exists()方法的逻辑,我们需要你的标记和js。

希望这会有所帮助。 干杯