2011-06-20 175 views
2

我不能讓.submit()函數的jQuery的工作我歸結一切都在我的代碼:如何在JQuery Ajax驗證之後提交表單?

<form action="/server/addserver.php" method="post" accept-charset="utf-8" id="mainform"><input type="text" name="test" value="" /><input type="submit" name="submit" value="Submit" id="submitbutton" /></form> 

<script type="text/javascript"> 
    $("#submitbutton").click(
    function(){ 
     $("#mainform").submit(); 
      return false; 
    }); 
</script> 

在我看來,這應該1 - 停止按鈕的默認行爲,則2 - 手動提交表單。

如果我換出.submit();與.hide();這樣可行。這不是首次運行一些ajax驗證後手動提交表單的首選方式嗎?

感謝

+1

您的假設是正確的,只是您在「提交」輸入類型而不是「按鈕」輸入類型上運行處理程序。所以,如果你改變「提交」作爲一個按鈕,它應該工作。 – rajasaur

+0

由於您使用'ajax驗證'而感到困惑。您是使用遠程異步驗證還是嘗試驗證表單並異步提交? –

+0

謝謝@rajasaur你是對的。 .click對輸入類型沒有很好的綁定。雖然理論上.hide();也不應該工作。 – bonez

回答

2

首先,有一對夫婦的事情,我想你應該知道的:

  1. 任何時候你想要把一個事件綁定到DOM元素上,你應該確保頁面已經完全加載。如果有疑問,請將代碼包裝在

    $(document).ready(function() { /* code to execute after page load */ });
    之內。

  2. 此外, .trigger(「提交」)方法不起作用,如果輸入[類型=「提交」]的名稱屬性元素被設置爲值「提交」。由於 .submit()不帶參數調用是 .trigger('submit')的快捷方式,因此,如果您隨時調用JQuery的 .submit()方法,則需要確保並指定輸入的名稱屬於非「提交」的東西。

現在,回答您的問題;首先關於是否返回錯誤是手動提交表單的首選方式,答案通常是否定的。原因是,返回做三件事,你通常不想做所有的事情。它可以防止事件的默認瀏覽器行爲,它也會阻止事件冒泡,並立即返回,退出該函數。通常,您可能只想要 event.preventDefault() event.stopPropagation() ...或甚至是取消綁定這個事件。在這種情況下,在我看來,返回錯誤而不是調用合適的夜間方法似乎混淆了你的代碼的意圖。

如果您還需要防止對默認的瀏覽器操作提交事件,你可以使用jQuery的交替觸發方法:

 
$('#mainform').triggerHandler('submit'); 
。 雖然驗證器方法本身應該可能是您在沒有錯誤的情況下調用 form.submit()的地方。它也應該是你處理表單提交的地方,因爲它是守門人,可以這麼說。總而言之,如果你要使用Validator插件,你應該遵循它自己的約定。確保表單也默認加入 名=提交「提交」到您的提交按鈕,然後刪除所有你擁有jQuery代碼,並使用從驗證文檔這個例子更換:

 
$("#mainform").validate({ 
submitHandler: function(form) { 
    form.submit(); // Don't use a JQuery selector here, just "form" 
} 
}); 

這應該允許該插件按預期運行。當然,最後一步是添加驗證規則。我希望有所幫助。如果事件仍然存在問題,請嘗試使用JQuery的Event對象方法在控制檯上進行調試。

+0

謝謝你的詳細回覆 – bonez

4

你可以這樣做:

$(function() { 
    $('#mainform').submit(function() { 
     if (isFormValid()) { // do your validation 
      return true; 
     } 
     return false; 
    }); 
}); 

時提交表單(只需使用普通<input type="submit" />按鈕),這將運行。在這裏返回false將阻止頁面發佈。

如果您希望將事件綁定到你的按鈕,嘗試這樣的:

$(function() { 
    $('#submitbutton').click(function() { 
     if (isFormValid()) { // do your validation 
      $('#mainform').submit(); 
     } 
     return false; 
    }); 
}); 
+1

但是如果你有ajax驗證 – svlada

相關問題