这个有点独特……
我有一系列复选框图像,当它们被点击时,表单提交......使用以下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();
});
但是,我希望表单在 rails 3 环境中使用 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
第二次更新
主要问题是$('#myform').submit();
提交为html。有没有办法将其更改为改为 format.js ?我也试过这个无济于事:
<%= f.check_box :rose, :onchange => '$(this.form).submit();' %>