2015-04-01 79 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); 
}) 
相關問題