事件不仅触发当前项目的所有项目

时间:2015-04-01 21:27:12

标签: javascript jquery jquery-plugins

我试图将我的插件附加到输入字段,它有点工作。因此,我将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);

2 个答案:

答案 0 :(得分:4)

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

可能应该直接将处理程序附加到你的元素:

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

答案 1 :(得分:2)

我认为这一行导致错误,因为item应该是选择器而不是元素:

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

解决方案是在项目上放置偶数处理程序

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