2012-07-16 105 views
0

我是咖啡脚本的新手,我正在为一个事件绑定一个问题。 我有一个div,通过ajax更新,然后我想在返回的部分定义一些额外的jQuery事件。 这些都在rails 3.2上运行。 我js.erb收益这部分罚款:coffeescript不更新dom元素

$('#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); 

但咖啡脚本永远不会奏效。有人能告诉我为什么吗?

+0

发布相应的html。 – asawyer 2012-07-16 22:38:21

回答

1

这是一个猜测,但您可能在部分被添加之前绑定事件。 $('#link_long')找不到你的元素,因为它还不存在,所以什么也没有发生。在你的JS - > CS翻译中的中断可能是将点击处理程序移动到它自己的$ ->回调中,这又是我在这里猜测的 - 在append之前运行。无论如何,拥有多个相互依存的文档预备处理程序都是在寻求麻烦。

最明显的选择是追加后绑定:

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

另一种选择是将文档绑定,然后由选择滤波器(当触发事件的过滤得到执行,所以你可以前绑定选定的元素存在):

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

你在现场。然而,你的第一个代码建议不起作用,因为我不能将咖啡与普通的JS混合。第二个建议虽然工作正常。谢谢。 – user1530181 2012-07-17 20:37:18