2015-10-16 60 views
0

我已经写了这个功能:如何绑定jquery函数来点击?

(function($){ 
    $.fn.loaderHolder = function(action){ 
     var loaderHolder = $(document.createElement('div')) 
           .addClass('loaderHolder'), 
      safeImage = $(document.createElement('img')) 
          .attr("src", "/static/images/icons/vault-bg.svg") 
          .addClass("safe"), 
      lockImage = $(document.createElement('img')) 
          .attr("src", "/static/images/icons/vault-lock.svg") 
          .addClass("lock"), 
      loader = loaderHolder.append(safeImage, lockImage); 

     return this.each(function(){ 
      if(action === "add"){ 
       $(this).append(loader); 
      } else if(action === "remove"){ 
       $(this).children('.loaderHolder').remove(); 
      }; 
     }); 
    }; 
}(jQuery)); 

这个函数生成或删除加载器。我可以像这样运行这个函数:$('.foo').loaderHolder('add');

但是,如果我想装载机添加到动态生成的元素,我需要写我的代码是这样的:

$('.holder').on('click', '.foo', function(){ 
    $(this).loaderHolder('add'); 
}); 

我真的不喜欢匿名函数。有没有其他的方式来写这个没有匿名函数?

谢谢!

编辑:谢谢所有的答复。编辑我的代码是正确的,忘记了在动态生成的部分中使用父选择器。

但我只是想知道一个标记是这样的:

$('.holder').on('click', '.foo', {action: 'add'}, $(this).loaderHolder); 

我知道这是不对的,但有什么办法把它做好这样的吗?或者你只需​​要匿名功能?代替匿名函数

$('.foo').on('click', youfun); 

的动态添加元素

+0

匿名函数的问题是什么? – Filype

+0

@Filype写入额外的代码行 – Yang

+0

这就是*假设*完成的方式! – Jamiec

回答

2

给函数的名称,你需要event delegation

$('staticParentSelector').on('click', '.foo', youfun); 

Event delegation

事件代表团允许我们附加一个单一的事件侦听器,到 父元素,将火了 选择匹配所有后代,无论是现在存在或添加这些后代在未来的 。