0

我是咖啡脚本的新手,我遇到了绑定到事件的问题。我有一个 div,它是通过 ajax 更新的,然后我想在返回的部分上定义一些额外的 jquery 事件。这一切都在rails 3.2上运行。我的 js.erb 很好地返回了这部分:

$('#top_box').empty()
$('#top_box').append('<%= escape_javascript(render :partial => 'form') %>')

表单部分有一个文本字段,我想在其上进行一些额外的事件处理,即

$('#link_long').on('click',function(){ $('#link_long').val("" );})

当我将上面的行添加到 js.erb 文件中时,一切正常,但我想看看如何在咖啡中做到这一点。所以,我把那句话翻译成咖啡,比如

$ ->
  $('#link_long').on 'click', ->
    $('#link_long').val("")

生成的咖啡的js代码是

(function() {

 $(function() {
 return $('#link_long').on('click', function() {
 return $('#link_long').val("");
 });
 });

}).call(this); 

但是咖啡脚本永远不会起作用。有人能告诉我为什么吗?

4

1 回答 1

1

这有点猜测,但您可能在附加部分之前绑定了事件。$('#link_long')找不到你的元素,因为它还不存在,所以什么也没有发生。您的 JS -> CS 翻译中的中断可能是将点击处理程序移动到它自己的$ ->回调中,这 - 我再次猜测 - 在其中运行的那个之前运行append。在任何情况下,拥有多个相互依赖的文档就绪处理程序都是自找麻烦。

最明显的选择是 append 之后的 bind:

$('#top_box').append('<%= escape_javascript(render :partial => 'form') %>')
$('#link_long').on 'click', -> $('#link_long').val("")

另一种选择是绑定文档,然后通过选择器进行过滤(在触发事件时完成过滤,因此您可以在所选元素存在之前进行绑定):

$(document).on('click', '#link_long', -> $('#link_long').val(""))
于 2012-07-17T04:22:55.573 回答