【问题标题】:jQuery/javascript stop working after a remote calljQuery / javascript在远程调用后停止工作
【发布时间】:2011-10-16 22:14:30
【问题描述】:

我有一个页面,其中包含一篇文章上的一组 cmets 和一个 jquery 代码,当我点击它时,我可以编辑评论:

cmets.js.coffee

$ ->
  $(".comment").click ->
    html = '''
              <form accept-charset="UTF-8" action="/comment?id=''' + $(this).data('value') + '''" data-remote="true" id="updt_comment_form" method="post">
              <textarea name="content"> ''' + $(this).children('p').text()+ ''' </textarea>
              <input name="commit" type="submit" value="Save">
              </form>
           '''
    $(this).hide()
    $(html).insertAfter($(this))

当我(远程)提交此表单时,会呈现以下内容: cmets/update.js.erb

$('#comments').replaceWith('<%=  escape_javascript(render("comments", :layout => false)) %>');
$('#fresh_comment').show();
$('#fresh_comment').effect("highlight", {}, 3000);

提交此表单后,cmets.js.coffee 中的 jquery 代码停止工作。下次我点击评论时,我将无法编辑它,除非我重新加载页面(这违背了使用 ajax 的目的)。

这正常吗?我是不是做错了什么?

我能想到的唯一解决方案是重置 update.js.erb 中的 jquery 触发器以使其再次工作......但这似乎不对。

我不明白为什么我的任何 jquery 代码在执行任何远程调用后都停止工作。

提前致谢!

【问题讨论】:

  • 箭头有什么作用? $(".comment").click -&gt; 从未见过。只是好奇。而且我也觉得'''三个引号有点奇怪
  • 就是coffeescript,和$(".comment").click( function() { ...
  • '''之间的字符串表示要保留它们的缩进和格式

标签: ruby-on-rails-3 jquery coffeescript ruby-on-rails-3.1


【解决方案1】:

您需要将点击处理程序委托给容器元素,例如:

$("#comment").parent().delegate(".comment", "click", function() {
    // handler code
});

当您通过.replaceWith 替换您的.comments 时,原来的点击处理程序不再存在。事件委托意味着附加的处理程序将始终有效,因为处理程序绑定到容器元素,而不会被替换。

参考:

注意:您也可以使用.live,但.delegate 比它有几个优点。

$(".comment").live("click", function() {
    // do stuff
});

【讨论】:

  • 啊,我明白了!所以当元素被替换时,处理程序和 dom 元素之间的绑定就消失了!这是有道理的……尽管在 ajax 调用期间,“#cmets”div 也被替换了。我应该改用以下内容吗? $("body").delegate(".comment", ...
  • @dcastro - 我刚刚编辑了我的答案。我认为$("#comment").parent().delegate(.. 应该足够了,但是,你的建议肯定会成功。
  • 我按照你的建议试过了,效果很好! $ -> $("#cmets").parent().delegate ".comment", "click", ->
猜你喜欢
  • 2014-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-20
  • 2018-01-05
  • 2013-05-09
  • 2023-02-19
相关资源
最近更新 更多