Ruby on rails Rails-UJS-Can';在第一次操作之后,无法让jquery触发

Ruby on rails Rails-UJS-Can';在第一次操作之后,无法让jquery触发,ruby-on-rails,ruby-on-rails-3,jquery,ujs,Ruby On Rails,Ruby On Rails 3,Jquery,Ujs,在我的show.html.haml视图中,我有一个表单,用户可以在其中更改一些设置。我刚刚更新使用Rails UJS,当我的用户更改下拉菜单时,他们会看到jquery正在做这件事 我在show.js文件中真正做的就是刷新表单所在的部分,并闪现一条错误消息 问题是,一旦更新一次,jquery下拉选择就不起作用。我想这是因为它呈现的是update.js视图——因此我包含了这个文件。但是,仍然没有发生任何事情,日志中也没有错误 在show.html.haml中,我已经(简化): 我的节目包括: = s

在我的show.html.haml视图中,我有一个表单,用户可以在其中更改一些设置。我刚刚更新使用Rails UJS,当我的用户更改下拉菜单时,他们会看到jquery正在做这件事

我在show.js文件中真正做的就是刷新表单所在的部分,并闪现一条错误消息

问题是,一旦更新一次,jquery下拉选择就不起作用。我想这是因为它呈现的是update.js视图——因此我包含了这个文件。但是,仍然没有发生任何事情,日志中也没有错误

在show.html.haml中,我已经(简化):

我的节目包括:

= semantic_form_for @product_order, :remote => true do |f| 
  = f.select :shipping_method, options_for_select(ProductOrder::Couriers, :selected => @product_order.shipping_method)
My show.js.erb和update.js.erb包含:

$("#show_form").html("<%= escape_javascript(render("show")) %>");
$("#status_banner").effect("highlight", {}, 3000);
$("#status_banner").html("<h2>ORDER STATUS: <%= (@product_order.state.titlecase) %></h2>");
$("#status_banner").removeClass("alert").addClass("alert <%= (@product_class) %>");
正如我所说的,第一个操作有效,但在第一次更新后失败。我的控制器更新操作有点笨重,但我已确保包含format.js。我还尝试将respond_to:js放在控制器的顶部


我是做错了还是有一个我看不到的简单修复方法?

您的问题是,在刷新表单后,您的js没有启动,因为从技术上讲,它是DOM中的一个新元素。您需要像这样使用jquery事件绑定:

jQuery ->
  $("#dropdown_select").on "change", ->
    $(this).closest("form").submit()
    $(this).serialize()
    null
    "script"
    false

您的问题是,在刷新表单后,js不会启动,因为从技术上讲,它是DOM中的新元素。您需要像这样使用jquery事件绑定:

jQuery ->
  $("#dropdown_select").on "change", ->
    $(this).closest("form").submit()
    $(this).serialize()
    null
    "script"
    false

我明白你的意思,我试过了,但它还是没有开火。已检查并再次检查,但日志中没有任何内容。我还注意到,我的下拉列表在第一次更新后无法正确呈现。我使用select使其美观-刷新后,我得到一个标准菜单。嗯,select的样式不应该更改,除非您使用的库使用javascript来更改它,但这是他们的库问题。另外,请尝试注释掉
$(this).serialize()
及其下面的所有内容,然后再次尝试运行它。Selected依赖于JS,它似乎丢失了曾经包含的javascript。我已经按照建议尝试了,但没有成功。那么肯定有其他东西与您的代码冲突。在一个基本的rails应用程序中,上面的内容对我来说很有用。我明白你的意思,并且已经尝试过了,但它仍然没有启动。已检查并再次检查,但日志中没有任何内容。我还注意到,我的下拉列表在第一次更新后无法正确呈现。我使用select使其美观-刷新后,我得到一个标准菜单。嗯,select的样式不应该更改,除非您使用的库使用javascript来更改它,但这是他们的库问题。另外,请尝试注释掉
$(this).serialize()
及其下面的所有内容,然后再次尝试运行它。Selected依赖于JS,它似乎丢失了曾经包含的javascript。我已经按照建议尝试了,但没有成功。那么肯定有其他东西与您的代码冲突。在一个基本的rails应用程序中,上面的内容对我很有用。
jQuery ->
  $("#dropdown_select").on "change", ->
    $(this).closest("form").submit()
    $(this).serialize()
    null
    "script"
    false