【问题标题】:Rails 3: javascript to update single div after form submit with .js.erb fileRails 3:使用 .js.erb 文件提交表单后,javascript 更新单个 div
【发布时间】:2014-09-21 13:40:01
【问题描述】:

您好,我是使用带有 rails 的 javascript 的新手,希望能得到一些帮助。我有一个喜欢按钮,我用来喜欢和不喜欢帖子。

home.html:

<%= form_for(current_user.appreciations.
                          build(:liked_id => post.id),
                          :remote => true) do |f| %>
 <div><%= f.hidden_field :liked_id %></div>
 <div class="actions"><%= f.submit "Like" %></div>
<% end %>

在帖子被点赞后,我使用 js.erb 文件来呈现不同的表单。

create.js.erb:

$("#like_form_<%= @post.id.to_s %>").html("<%= escape_javascript(render(:partial => 'users/unlike', :locals => {:post => @post})) %>")

我想添加一行,之后在我的视图中更新 div class="like-count'。

home.html:

<div class="like-count<%= "_"+ post.id.to_s%>">
  <%= user_post.likers.count.to_s %>
</div>

我有很多帖子显示在提要中,我使用 post.id.to_s 来选择要更新的特定帖子,例如计数。为了进行测试,我针对特定的帖子 id=94 使用了下面的代码,但它似乎不起作用。

新的 create.js.erb:

$("#like_form_<%= @post.id.to_s %>").html("<%= escape_javascript(render(:partial => 'users/unlike', :locals => {:post => @post})) %>"
$(".like-count_94").reset();

任何关于正确功能的输入或我出错的地方都会很棒,非常感谢。

【问题讨论】:

    标签: javascript html ruby-on-rails ajax


    【解决方案1】:

    如果您的 like-count div 是唯一的,为什么不使用 ID 而不是类呢?

    $("#like-count").reset();
    

    如果它确实需要是一个类,并且由于您要获取第一个类,则可以将此语法用于first 方法(jsfiddle):

    $(".like-count").first().text('NEW TEXT/CONENT TO ADD');
    

    我不相信这是正确的 jQuery 语法:

    $(".like-count").[0].reset();
    

    【讨论】:

    • 感谢您的帮助,我正在尝试使用 .reset(),我在提要中有许多不同的帖子,并且需要在每个帖子中使用 .like-count 作为一个类。我需要使用 .like-count 来定位正确的帖子以更新点赞数。我不想用文本替换 div,而只是刷新要更新的内容以显示新的喜欢。对于测试,我正在使用 $(".like-count_94").reset();但是,要针对特定​​帖子,单击“赞”按钮不会刷新 .like-count_94 div 并显示新的赞数。我已更新帖子以显示我的更改,谢谢!
    • 没问题!仅供参考,reset() - 方法 - 用于表单并将它们重置为默认状态(即清除表单字段)。我不相信它会在 div 上工作。我的感觉是你想要 text('')/html('') 方法,它将替换现有内容或 append('') ,它将向 div 添加内容。您可能只需要在控制器/.js.erb 中重建 div 的内容,然后重新渲染它(即使用 text() 或 html() 方法)。
    • 我已经用 .html() 和 .reset() 尝试了一些东西,但我仍然对如何刷新 div 感到迷茫,我什至尝试创建一个单独的部分来替换部分但我无法获得“帖子”:本地人工作:(
    • 长话短说,reset() 无法满足您的需求。只需将表单字段重置为其原始/默认状态和值。 .html() 或 .text() 是您需要的。真的没有办法“刷新”你的 div 的内容。您必须重建它并将其添加到 .js.erb 中的 DOM。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多