jquery仅在刷新页面以切换rails应用程序时才有效

时间:2015-09-27 14:34:25

标签: javascript jquery html ruby-on-rails capybara

在我的Rails应用程序上显示div的一部分的切换操作仅在我刷新页面时才有效。如果我点击指向该页面的链接,则所有切换都已打开,并且不会对点击做出反应。任何帮助将不胜感激!此外,如果有人有关于如何使用Capybara进行测试的提示,那就太棒了。

这在我的app / assets / javascripts

$(document).ready(function(){
  $(".donation-time").hide()
  $(".donation-candidate").on("click", function(event){
    $(this).siblings().first().toggle();
    $("span", this).toggleClass("glyphicon-chevron-right glyphicon-chevron-down");
  })
})

这是我对所使用视图的偏爱,而且它是完全打开且可见的部分,而不是在点击页面后可见的.donation候选者。

<div class="donation-candidate">
  <h3><span class="glyphicon glyphicon-chevron-right"></span> <%= candidate_issue.name %></h3>
  <div style="margin-left: 32px;"><h4><%= candidate_issue.stance %></h4></div>
</div>


<div class="donation-time">
  <div style="margin-left: 32px;">
    <%= form_for Donation.new, url: donations_path do |f| %>
      <%= f.label :amount %>
      <%= f.hidden_field :candidate_issue_id, value: candidate_issue.id %>
      <%= f.number_field :amount, in: 1.0..2700.0, step: 1.0 %>
      <%= f.hidden_field :issue_id, value: candidate_issue.issue_id %>
      <%= f.submit "Donate" %>
    <% end %>
  </div>
</div>

第一次使用jquery或javascript,所以不确定在哪里看。如果您有关于如何使用水豚进行测试的提示,那就太棒了。我在场景中包含了js:true并将selenium作为宝石包含在内,但是我不知道如何点击打开div,因为它显然不是一个按钮或链接。谢谢!

2 个答案:

答案 0 :(得分:1)

你在使用turbolinks吗? $(Document).ready()需要针对turbolinks的变通方法,如本文use document ready with turbopinks

所述

答案 1 :(得分:0)

听起来您的应用https://github.com/rails/turbolinks中可能存在turbolinks。 Turbolinks通过Ajax请求下一页然后替换页面正文来加速页面加载。这意味着脚本不必重新分析,等等也意味着.ready函数不会再次执行。您可以将$(文件).ready更改为

$(document).on('page:change', function(){
  ...
})

如果您的函数是幂等的,否则您可能需要page:load(有关每种类型的事件触发的详细信息,请阅读turbolinks文档),或者您可以安装jquery-turbolinks或者您可以禁用turbolinks。

对于测试,您可以使用

单击元素
find(:css, '.donation-candidate').click

如果你有:css作为Capybara的默认值

,则可能不需要css