2015-04-01 38 views
2

我想将我的插件附加到输入字段,并且它有点作用。因此,我将on()onchange附加到输入字段,并且当它触发时,会触发每个输入,而不仅仅是发生更改的输入。这是什么造成的?是因为我使用$(document).on()吗?我是这样添加的,因为项目会动态地添加到页面中。事件会触发所有项目,而不仅仅是当前项目

(function($){ 
    $.fn.itemsave = function(config){ 
    return this.each(function(){ 
     var item = $(this); 
     var opt = { 
      // The options 
     }; 
     var e = $.extend(opt, config); 
     $(document).on("change", item, function(){ 
      request(false, e); 
     }); 
    }); 
})(jQuery); 

它是怎样叫:

$(".simplesave").itemsave(null); 
+0

当使用jQuery变量时,应该使用特殊符号:var $ item = $(this)。它会避免混淆 – Sigismundus 2015-04-01 21:55:06

回答

4

你传递一个jQuery对象作为.on()第二个参数。这不是一个错误,但是库会将它解释为一个对象,可以作为event.data提供给事件处理程序。这也意味着没有事件处理委派进行。因此,您正在建立一个“更改”事件处理程序,当任何“更改”事件冒泡到文档级别时,它将触发。

可能应该只处理程序直接连接到你的元素:

item.on("change", function() { 
    request(false, e); 
}); 
+0

或者更短的'item.change(function(){...})' – BackSlash 2015-04-01 21:32:22

+0

@pointy:使用documents.on,它应该使用委托权吗?它应该没有穿上物品也是对的? – Vikash 2015-04-01 21:33:42

+0

@Vikash否 - 只有当第二个参数是一个**字符串**时才会发生委托,**被视为一个选择器。 – Pointy 2015-04-01 21:34:18

2

我相信这条线是导致一个错误item应该是一个选择不是一个元素:

$(document).on("change", item, function(){ 

解决的办法是在物品上加上均匀的处理器

$(item).on("change", function(){ 
    request(false, e); 
}) 
相关问题