提交后清除Rails远程表单

Dig*_*ora 12 jquery ruby-on-rails

我正在使用带有jQuery的Rails 3,并且有一个带有单个文本输入和提交按钮的简单表单.我提交表单:remote => true,并希望提交表单清除输入.我试过这个jQuery代码:

$('#new_message').submit(function() {
  $('#message_content').val('');
});
Run Code Online (Sandbox Code Playgroud)

但是,这会提交表单之前清除输入,因此我最终会提交一个空白表单.

经过一番搜索后,我也尝试了以下版本:

$('#new_message').submit(function(e) {
  e.preventDefault();
  this.submit();
  $('#message_content').val('');
});
Run Code Online (Sandbox Code Playgroud)

...但是这似乎覆盖了:remote => true魔法,并且表单会在整页重新加载时提交.有任何想法吗?

abh*_*hek 21

当为标记的表单按下提交按钮时remote => true,rails.js中的javascript代码会执行submit().您无需覆盖该功能.

试试这个$(document).ready-

(编辑:使用bind代替live.感谢Darren Hicks.)

$("#new_message").bind("ajax:complete", function(event,xhr,status){
  $('#message_content').val('');
}
Run Code Online (Sandbox Code Playgroud)

这会为事件添加事件处理程序ajax:complete.完成ajax-submit-form后会触发此事件.更多这里.

  • .live()已弃用jQuery.你想在上面的答案中使用.bind()!http://stackoverflow.com/questions/14526033/object-has-no-method-live-jquery (2认同)
  • 你总是可以在create_js.erb文件中使用respond_to:js并清除表单:`$('form#new_message').find("input [type = text],textarea").val("")` (2认同)