4

On不能代替live;因为新的ON不适用于未来的元素。我的实现没有问题;我习惯于使用 live,我绝对知道 jquery 什么时候可以工作。

哈姆部分:

.field
        %label Select a file
        = file_field_tag 'post[image]', :class => :dashed
        %span.adder + add another file

咖啡部分:

$("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(){ });

(感谢大家的回答。)

4

5 回答 5

6

要使用未来的元素,您必须像这样在文档上使用

$(document).on('click', 'span.adder', function(){
       //Code here
});
于 2013-02-15T09:19:15.687 回答
1

.on()出现之前,.live()已经被认为是处理事件绑定的一种低效方式,因为为了将来使用,您必须使用.on()

例如:-

$(document).on('click', '#yourElement', function() { 
  // your functions here
});

这里有更好的解释

于 2013-02-15T09:24:54.173 回答
0

这是一个替代品。直接翻译是:

$(document).on('click', '.my-selector', function() {});
于 2013-02-15T09:19:19.087 回答
0

他们弃用并删除了它,因为他们有更好的实施。你看到的文档.on()

$(ancestor).on(event, element, function);

您应该将其用作靠近该元素的祖先。存在一些性能问题。

也升级 jQuery 版本。

于 2013-02-15T09:19:23.483 回答
0

On works asdelegate`过去做的,不完全像.live;您必须在父级上使用它,然后指定事件和触发它的子级;就像是。

$(window).on("click", ".button", function(){ 
    alert("You clicked the button... and I hate alerts");
});
于 2013-02-15T09:20:56.580 回答