在 Rails 中重定向后脚本不工作

Script not work after redirect in Rails

我的页面上有一个带有咖啡脚本的清除按钮

html

<div class="containerNew">
<%= form_for @customer, :url => customers_path do |f| %>
<table id="createNewCustomer">
    <tr>
        <td colspan="2">Input</td>
    </tr>
    <tr>
        <td class="title">
            <%= f.label :machine_id, "Error Machine:" %>
        </td>
        <td class="content">
            <%= select("customer", "machine_id", Machine.all.collect {|m| [ m.name, m.id ] }, { include_blank: false }) %>  
        </td>
    </tr>
    <tr>
        <td class="title">
            <%= f.label :error_info, "Error Info:" %>
        </td>
        <td class="content">
            <%= f.text_area :error_info %>
        </td>
    </tr>
</table>
<div class="bottomBtnArea">
    <%= f.submit "Submit" , class:"button btn btn-primary" %>
    <input type="button" name="clear" value="clear" id="clearBtn" class="btn btn-default">
</div>
<% end %>

咖啡

$ ->
  $('#clearBtn').click ->
    $("#customer_machine_id").get(0).selectedIndex = 0
    $("textarea").val("")

当我直接访问此页面的 url 即 localhost:3000/customers/new

时效果很好

但是当我使用导航 link 访问此页面时它无法工作

<%= link_to "Add", new_customer_path %>

我使用chrome调试我的脚本,当我使用nav访问这个页面然后点击清除按钮时,它似乎没有进入功能块。脚本文件似乎没有被加载。我不明白为什么会这样。

这很可能是因为 Turbolinks,这是一个 Rails 功能,可以执行一些神奇的缓存并阻止 jQuery 的页面加载触发器正常工作。这个问题之前已经回答过(例如here)——解决方案是在 Turbolinks 的加载事件上添加一个触发器来加载你的 JS 函数,而不是 jQuery 通常的 $(document).ready 钩子。假设您使用的是 Rails 5,应该这样做:

$(document).on 'turbolinks:load', ->
  $('#clearBtn').click ->
      $("#customer_machine_id").get(0).selectedIndex = 0
      $("textarea").val("")

有关详细信息,请查看 turbolinks documentation