2015-06-19 101 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(); 
       } 
      **}** 
相關問題