2010-12-21 50 views
0

为什么没有生存(或死亡)事件我绑定到动态元素触发?实时jQuery事件没有为动态元素触发

(function ($) { 
    $.fn.myPlugin = function() { 

    var $filterBox = $("<input type='text'>").live("click", function() { 
     alert("Clicked"); 
    }); 
    this.before($filterBox); // insert into DOM before current element 
    return this; // keep chain 
    }; 
})(jQuery); 

我在几个<select>元素上调用myPlugin。我认为如果我在将元素添加到DOM之前绑定它,没有Live插件就会工作,但即使是现场活动也不会触发。是因为我的元素没有ID吗?


编辑: 下无法正常工作或:

var $filterBox = $("<input type='text'>").bind("click", function() { 
     alert("Clicked"); 
}); 
+0

不知道为什么我不工作。但是只能为需要的选择器调用一次活。在你的代码中点击()应该足够了。 – 2010-12-21 13:38:21

+0

RE:您的编辑。这应该很好。事实上,它*确实*在我的(和尼克)jsfiddle中工作。那么,你有没有在网页上的任何错误?你能打开萤火虫吗? – Stephen 2010-12-21 13:43:42

+0

你调用插件的元素有多少? – SLaks 2010-12-21 13:48:40

回答

0

通过不使用互相替换全局变量,并遍历每个所讨论的元素与this.each(...)解决:

(function ($) { 
    $.fn.myPlugin = function() { 
     return this.each(function() { 
      // do stuff 
     }); 
    }; 
})(jQuery); 
1

live方法适用于选择,不沾边的元素。
您可以处理正常(非liveclick事件,它应该正常工作。

+0

不起作用。查看更新的问题。 – 2010-12-21 13:40:01

2

.live()作品掀起了选择(因为它会针对在事件发生时选择的目标),则不能直接附加到一个元素...你应该只使用.click()在这些情况下:

(function ($) { 
    $.fn.myPlugin = function() { 

    var $filterBox = $("<input type='text'>").click(function() { 
     alert("Clicked"); 
    }); 
    this.before($filterBox); // insert into DOM before current element 
    return this; // keep chain 
    }; 
})(jQuery); 

You can try it out here,或者与.insertBefore()短一点:

(function ($) { 
    $.fn.myPlugin = function() {  
    $("<input type='text'>").click(function() { 
     alert("Clicked"); 
    }).insertBefore(this); 
    return this; 
    }; 
})(jQuery); 

You can test it here

0

难道这只是因为"<input type='text'>"不是一个有效的HTML吗?你还没有关闭你的标签。但是,我不确定jQuery是否无法为您关闭它。

相关问题