0

これは少しユニークです...

一連のチェックボックス画像があります。これらの画像をクリックすると、フォームが送信されます...次のJavascriptを使用します。

$('#pin_rose').simpleImageCheck({
  image: '/images/rose.png',
  imageChecked: '/images/one.png'
   })
  .change(function() {
    var c = 'checked';
    if (!$('#pin_rose').is(':checked')) {
      $(this).closest('form').submit();
    }
    $(this).closest('form').submit();

});

ただし、ページがリロードされないように、rails3環境内でajaxを使用してフォームを送信したいと思います...

私の_edit.htmlパーシャルには、次のものがあります。

<%= form_for([@posts, @pin], :html => {:multipart => true}, :remote => true) do |f| %>

私のpins_controller.rbコントローラーには次のものがあります。

def update
...
    respond_to do |format|
      if @pin.update_attributes(params[:pin])
        format.html { redirect_to @post }
        format.js
      else
        format.html { redirect_to '/static_pages/login' }
        format.js
      end
...
end

次に、update.js.erbに

$("#new_pins").append("<h1>new pin added</h1>")

問題は、画像をクリックすると、フォームが送信され、データが追加されますが、ajaxを使用するのではなく、リダイレクトされることです。

Railsが$(this).closest('form').submit();Javascript呼び出しをオーバーライドして、htmlとして送信されないようにする方法はありますか?

Javascriptで標準のajax呼び出しを実行できることはわかっていますが、将来オブジェクトをプルする必要があるため、実行したくありません(「新しいピンが追加されました」は今のところです)。

更新: レーキルートを実行しました...

           users POST /users(.:format)                           users#create
        new_user GET  /users/new(.:format)                       users#new
            user GET  /users/:id(.:format)                       users#show
       post_pins POST /posts/:post_id/pins(.:format)             pins#create
    new_post_pin GET  /posts/:post_id/pins/new(.:format)         pins#new
   edit_post_pin GET  /posts/:post_id/pins/:id/edit(.:format)    pins#edit
        post_pin PUT  /posts/:post_id/pins/:id(.:format)         pins#update
           posts POST /posts(.:format)                           posts#create
        new_post GET  /posts/new(.:format)                       posts#new
       edit_post GET  /posts/:id/edit(.:format)                  posts#edit
            post GET  /posts/:id(.:format)                       posts#show
                 PUT  /posts/:id(.:format)                       posts#update
           login      /login(.:format)                           static_pages#login
           about      /about(.:format)                           static_pages#about
                      /posts(.:format)                           posts#new

2回目の更新

主な問題は、$('#myform').submit();htmlとして送信することです。これをに変更して、代わりにformat.jsに移動する方法はありますか?私もこれを無駄に試しました:

<%= f.check_box :rose, :onchange => '$(this.form).submit();' %> 
4

1 に答える 1

0

フォームに明示的に名前を付けます。つまり、次のようになります。

<%= form_for([@posts, @pin], 
   :remote => true, 
   :html => {:multipart => true, :id=>'myform'} ) do |f| %>

次に、JavaScriptで:

$('#myform').submit();
于 2012-05-28T23:52:20.587 に答える