2012-11-20 470 views
1

在我的show.html.haml视图中,我有一个表单,用户可以更改一些设置。我刚刚更新使用Rails UJS,当用户更改下拉菜单时,他们会看到jquery shizzle这样做。Rails UJS - 无法让jquery在第一个动作后触发

我在show.js文件中所做的所有事情都是刷新表单的部分内容,并闪烁显示错误消息。

问题是,一旦它被更新一次,jquery下拉选择不起作用。我想这是因为它渲染了update.js视图 - 因此我包含了这个文件。但是,仍然没有任何反应,我在日志中没有出现错误。

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

#show_form 
    = render "show"   

我的节目部分包含:

= semantic_form_for @product_order, :remote => true do |f| 
    = f.select :shipping_method, options_for_select(ProductOrder::Couriers, :selected => @product_order.shipping_method) 

我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) %>"); 

在我product_order.js.coffee我有这样的:

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

就像我说的,第一个动作起作用,但在第一次更新后失败。我的控制器更新操作有点笨重,但我确定我已经包含了format.js。我也试过把respond_to:js放在控制器的顶部。

我在做这个错误还是有一个简单的修复,我无法看到?

回答

1

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

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

我明白你的意思,并尝试,但它仍然不点火。已经检查并重复检查,并在日志中没有任何内容。 S – simonmorley

+0

我还注意到我的下拉菜单在第一次更新后无法正确显示。我使用选择使它更漂亮 - 刷新后,我得到一个标准的菜单。 – simonmorley

+0

那么,选择的样式不应该改变,除非你使用的库使用javascript来改变它,然而这是它们的一个库问题。另外,尝试注释'$(this).serialize()'和它下面的所有内容,然后再次尝试运行它。 – Magicmarkker

相关问题