これは少しユニークです...
一連のチェックボックス画像があります。これらの画像をクリックすると、フォームが送信されます...次の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();' %>