【问题标题】:coffeescript doesn't update dom elementcoffeescript 不更新 dom 元素
【发布时间】:2012-07-15 20:05:53
【问题描述】:

我是咖啡脚本的新手,我遇到了绑定到事件的问题。 我有一个 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); 

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

【问题讨论】:

    标签: jquery ruby-on-rails coffeescript


    【解决方案1】:

    这有点猜测,但您可能在附加部分之前绑定了事件。 $('#link_long') 找不到你的元素,因为它还不存在,所以什么也没有发生。您的 JS -> CS 翻译中的中断可能是将点击处理程序移动到其自己的 $ -&gt; 回调中,这--再次,我在这里猜测--在其中包含 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(""))
    

    【讨论】:

    • 你是正确的。但是,您的第一个代码建议不起作用,因为我无法将咖啡与常规 JS 混合。第二个建议虽然效果很好。谢谢。
    猜你喜欢
    • 2021-08-24
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多