1

私のshow.html.hamlビューには、ユーザーがいくつかの設定を変更できるフォームがあります。Rails UJSを使用するように更新しました。ユーザーがドロップダウンメニューを変更すると、jqueryshizzleがそれを実行しているのがわかります。

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を配置してみました。

私はこれを間違ってやっていますか、それとも私が見ることができない簡単な修正がありますか?

4

1 に答える 1

1

問題は、フォームを更新した後、技術的にはDOMの新しい要素であるため、jsが起動しないことです。次のようにjqueryイベントバインディングを使用する必要があります。

jQuery ->
  $("#dropdown_select").on "change", ->
    $(this).closest("form").submit()
    $(this).serialize()
    null
    "script"
    false
于 2012-11-20T15:44:08.623 に答える