单击动态添加的元素

时间:2014-11-19 09:59:23

标签: javascript jquery

大多数人都知道如何绑定"点击'使用

动态添加元素的事件
 $('#main').on('click','.link',function(){ //some code here });

.link是动态添加的元素。但是,当我想只在第一次点击时触发功能时,上面的代码应该如何?是的,我知道.one(),但问题是将.one().on()合并。

4 个答案:

答案 0 :(得分:1)

show .one()和.on()的jQuery文档与1.7相同:

.one( events [, selector ] [, data ], handler )
 .on( events [, selector ] [, data ], handler )

答案 1 :(得分:0)

如果您只想在第一次单击时触发它,则可以在执行后取消绑定侦听器。

$('#main').on('click', '.link', function() {
    $('#main').off('click', '.link');

    // do whatever you need here
});

答案 2 :(得分:0)

.one()

  

说明:将处理程序附加到元素的事件。每个事件类型的每个元素最多执行一次处理程序。

$('#main').one('click','.link',function(){
  //some code here 
});

答案 3 :(得分:0)

我认为不可能直接创建委托on(),因为委托处理程序的连接方式,最多会被解雇一次(即one())。

  

on() :提供选择器时,事件处理程序称为委托。当事件直接发生在绑定元素上时,不会调用处理程序,但仅适用于与选择器匹配的后代(内部元素)。 jQuery将事件从事件目标起泡到附加处理程序的元素(即最里面到最外层的元素),并为该路径上与选择器匹配的任何元素运行处理程序。

因此,事件将始终在后代触发,即使您在处理程序体内使用.link方法分离当前元素.off()的处理程序。
但是,您仍然可以通过将DOM元素列表保持为闭包并在执行实际代码工作之前匹配列表来实现此目的。

var elements = [];//list of elements which is responded to events at once
$('#main').on('click', '.link', function() {
    if(matched){//match $(this)/ uniqueIdentifier in 'elements' array
      // prevent default and stopPropagation
      return;
    }
    elements.push($(this));//or push something like 'id' to uniquely identify current element
    //..codes
});