0

我在模板的 scala.html 文件中有一个这样的 div(我正在使用 PlayFramework):

<div id="box">Text in the box</div>

这个咖啡脚本:

$("#box").on "click", -> 
    $("#box").fadeOut()

它不起作用:如果我单击 div #box,则不会发生任何事情。我正在尝试使用纯 jquery 来了解它是否是咖啡问题。然后我将相同的 jQuery 脚本放入<head>

<script>
$("#box").on("click", function() {
    return $("#box").fadeOut();
 });
</script>

并且不再工作,但如果我把它放在 scala.html 文件(包含 div #box)中,它就可以工作!错误在哪里?

4

1 回答 1

2

div#box 通过单击按钮加载 Ajax 调用,然后在加载之前它不存在。是问题吗?

是的,这会导致它。而且,委托绑定通常是解决方案。

原因是 jQuery 只能将事件绑定到当时存在的元素。target但是,由于几乎所有事件都通过's冒泡/传播.parents(),因此可以使用现有的父级来表示预期的后代。

$(document).on 'click', '#box', ->
  # ...

在这种情况下,document是现有的父级,允许在它存在于 DOM 之前为其创建#box一个绑定。click

否则,事件的绑定可以延迟到元素存在为止。这就是您问题的最后一部分发生的情况,因为.<script><div>.

于 2013-10-18T11:41:52.170 回答