Rails表单使用.submit()返回false工作但不返回.on()

时间:2016-03-18 13:45:02

标签: jquery ruby-on-rails

我想提交带有ajax的表单,因此我尝试使用return false;禁用其提交。当我使用

$('#post_form').submit(function() {

return false;运行正常。所以有什么问题?好吧,我不想绑定到#post_form。我想用:

$(document).on('submit', '#post_form', function(e) {

return false;不起作用。 e.preventDefault();完全失败了。 发生什么事了?

<%= f.button( :submit, name: "Post", title: "Post",
              class: 'btn btn-default btn-xs notice_submit', id: 'postbutt'
              ) do %>
  <span class="glyphicon glyphicon-ok" aria-hidden="true"></span>
<% end %>

使用Javascript:

$(document).on('submit', '#post_form', function(e) { // return false; doesn't work
// $('#post_form').submit(function() { // return false; works fine
  if ( validatePostForm() ) {
    $.ajax({
      type: 'POST',
      url:  $(this).attr('action'),
      data: $(this).serialize(),
      dataType: 'script'
    });
  }
  e.preventDefault(); // this doesn't do anything
  return false;       // neither does this
});

修改

我刚刚发现从表单中删除remote: true会让它正常工作,但我不明白为什么:

<%= form_for(:post, url: :posts, method: :post,
                    html: { class: "notice_form", id: "post_form" }
                    # remote: true 
                    ) do |f| %>

1 个答案:

答案 0 :(得分:1)

尝试放入e.preventDefault();在功能的开头。这是为了确保它运行,因为如果放在底部,函数中的其他内容可能会阻止它运行。

放入console.log('test');并打开浏览器的调试控制台,看看它是否实际触发。 或者,您可以使用alert('test');检查。