事件为所有项目而不仅仅是当前项目激发

Event fires for all items not just the current item

本文关键字:项目 不仅仅是 事件      更新时间:2023-09-26

我正在尝试将我的插件附加到一个输入字段,它在一定程度上起作用。因此,我将一个带有onchangeon()附加到输入字段,当它触发时,它会为每个输入触发,而不仅仅是更改的输入。是什么原因造成的?是因为我在使用$(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);

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

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

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

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

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

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

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