coffeescript不会更新dom元素

时间:2012-07-16 22:17:56

标签: jquery ruby-on-rails coffeescript

我是咖啡脚本的新手,我正在解决与事件绑定的问题。 我有一个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); 

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

1 个答案:

答案 0 :(得分:1)

这是一个猜测,但你可能在附加部分之前绑定事件。 $('#link_long')找不到您的元素,因为它尚不存在,因此没有任何反应。你的JS中断 - &gt; 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(""))