5

Rails 3 アプリで、特定のチェックボックスが切り替えられるたびにブラウザーがリモート関数を呼び出すようにしたいと考えています。Rails 2 では、これは簡単に渡すことができました。

:onclick => remote_function(...)

チェックボックスヘルパーに。Rails 3 では、remote_* 関数が非推奨になったため、次の回避策を試しました。

  • を使用してチェックボックスの周りにフォームを作成しますform_tag ... :remote => true
  • ハンドラー$("dummy_form").submit();から呼び出してフォームを送信するonclick

Rails にバンドルされている rails.js ファイルには、submitイベントをリッスンするオブザーバーがあります。ただし、これらはユーザーが送信ボタンをクリックしたときにのみトリガーされるように見えますが、form.submit()呼び出されたときにはトリガーされません (これまでのところ、FF でのみテストされています)。

これにより、送信が AJAX を介してバックグラウンドで行われるのではなく、通常の方法で行われるという望ましくない影響が生じるため、ブラウザーは現在のサイトを離れ、コントローラーからの応答を表示します。

誰かが回避策を知っていますか? たぶん、同じ機能を取得するためのまったく異なる方法ですか?

4

1 に答える 1

1

次のように呼び出してフォームを送信できます。

$("dummy_form").request({
    onSuccess: function(response) {eval(response)}
});

これにより、AJAX を使用して form_tag に指定された URL にフォームが送信され、受信した応答が評価されるため、JS で応答する必要があります。望まない場合は onSuccess の実装を変更してください。

あなたが言うように、フォームの送信が回避策である場合、フォーム全体を送信する代わりに、チェックボックスのオンクリックイベントを手動で処理し、AJAX リクエストを送信することもできます。

<%= javascript_tag do %>
Event.observe(window, 'load', function() {
  $('CHECK_BOX_ID').observe('click', function(event) {
    new Ajax.Request('/your/url', {
      onSuccess: function(response) {
        // yada yada yada
      }
    })
  });
});
于 2010-10-06T12:51:07.497 に答える