开启 不能替代 live ;新的 ON 是 NOT ,适用于未来的元素。我的实施没有问题;我习惯使用直播,但我肯定知道什么时候有什么作用与jquery有效。
haml part:
.field
%label Select a file
= file_field_tag 'post[image]', :class => :dashed
%span.adder + add another file
coffe part:
$("span.adder").on "click", (e) ->
new_field = $(this).closest(".field").clone()
$(new_field).insertAfter( $(this).closest(".field") )
为什么添加的新span.adder没有附加到其类的jquery行为? 在这种情况下,像这样的事情会起作用。
为什么JQuery的家伙会删除它? 我不明白。
更新
$("span.adder").on("click", function(){ });
不会像现场一样工作。
必须是
$(document).on("click", "span.adder", function(){ });
(感谢大家的回答。)
答案 0 :(得分:6)
要使用未来的元素,您必须使用此文档
$(document).on('click', 'span.adder', function(){
//Code here
});
答案 1 :(得分:1)
在.on()
出现之前,.live()
已经被认为是处理事件绑定的低效方式,因此将来使用.on()
e.g: -
$(document).on('click', '#yourElement', function() {
// your functions here
});
有一个更好的解释here
答案 2 :(得分:0)
这是一个替代品。直接翻译将是:
$(document).on('click', '.my-selector', function() {});
答案 3 :(得分:0)
他们弃用并删除它,因为它们有更好的实现。您会看到.on()
$(ancestor).on(event, element, function);
您应该将其用作靠近该元素的祖先。有一些性能问题。
也升级jQuery版本。
答案 4 :(得分:0)
On
works as
委托`曾经做过,而不是完全像.live;您必须在父级上使用它,然后指定事件和触发它的子级;类似的东西。
$(window).on("click", ".button", function(){
alert("You clicked the button... and I hate alerts");
});