2015-06-19 110 views
2

我有我的项目中将由jQuery Ajax提交的表单。表单提交不工作后第二次尝试在jquery ajax

数据将在服务器端进行验证,如果数据无效,它将加载带有验证错误的表单并将该HTML附加到div。

在下一次表单提交尝试时,它会直接重定向到表单动作URL,即 event.preventDefault()不起作用。

initFormSubmit: function() { 
       var form = $('form#forum'); 
       $(document).on('submit', form, function (event) { 
        event.preventDefault(); 

        if ($(this).attr('name')) { 
         form.append(
           $("<input type='hidden'>").attr({ 
          name: $(this).attr('name'), 
          value: $(this).attr('value')}) 
           ); 
        } 

        var formData = form.serialize(); 

        $.ajax({ 
         type: form.attr('method'), 
         url: form.attr('action'), 
         data: formData, 
         success: function (data) { 
          $('#respond').empty(); 

          $('#respond').append(data); 
         } 
        }); 
       }); 

      } 

data = form with validation error if invalid。

回答

1

您没有正确使用事件委派。您传递给.on的第二个参数是form,它是一个jQuery对象。

对于事件委托,第二个参数需要是一个字符串。由于它是一个对象,因此jQuery假定它是作为data参数而不是selector参数传入的。 (如果在处理程序中执行console.log(event.data),它应该显示表单对象)。

简单地改变处理程序:

$(document).on('submit', 'form#forum', function (event) { 

,并确保从form处理程序内的所有引用更改为$(this)

+1

没有它的不工作;) –

+0

我做的唯一的工作就是加载包含js文件上面的代码与附加的HTML。但它不是一个好的做法,我认为 –

+0

也许我现在专注于完全错误的问题。什么是'initFormSubmit'。你能提供更多的问题背景吗? – Stryner

0

尝试在这样的提交事件的结束使用event.preventDefault

$(document).on('submit', form, function (event) { 

       if ($(this).attr('name')) { 
        form.append(
          $("<input type='hidden'>").attr({ 
         name: $(this).attr('name'), 
         value: $(this).attr('value')}) 
          ); 
          event.preventDefault(); 
       } 
      **}** 
相关问题