2012-11-20 2874 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

相關問題