2013-01-17 49 views
0

我們的網站有一個注入jQuery對話框的表單。在輸入表單數據並單擊提交按鈕(一個jQueryUI對話框按鈕)後,表單首先由javascript驗證,然後提交給服務器。我發現,在粘貼一個值爲必填和提交的文本框之後,偶爾當我下次打開表單時,它會立即提交而無需用戶單擊該按鈕(我在調試器語句之前對其進行了驗證.submit()的實例僅在表單提交發生時才點擊按鈕)。成功提交後無意提交表格

是否有其他人遇到意外表單提交的實例,而除了服務器端驗證有沒有什麼方法可以對付它?

只要是明確的,是事件的順序如下:

  1. 用戶點擊添加按鈕,它獲取的形式(局部視圖),並將其注入到對話框,然後打開的對話框。
  2. 用戶將一個值粘貼到強制文本框中(還有其他幾個控件)。
  3. 用戶單擊提交按鈕執行低級驗證,並通過ajax提交表單,成功後關閉對話框。
  4. 沖洗並重復至:
  5. 用戶單擊添加按鈕,該按鈕將獲取表單並將其注入到對話框中,該對話框將打開並立即提交,但在服務器上驗證失敗。

Form.submit回調

$("#SearchEdit>form").submit(function (e) { 
     if (TermPresent()) { 
      return true; 
     } else { 
      e.preventDefault(); 
      return; 
     } 
    }); 

function TermPresent() { 
    return ($("textarea#MySearch_SearchTerms").val() != "" ? true : false); 
} 

回答

2

你可以從你的驗證代碼底部更改type="submit"type="button",然後峯會不是允許的形式提交自己的。

+0

有問題的按鈕是通過jSon屬性創建的對話框按鈕之一,所以它不是type = submit。它的點擊回調運行驗證,然後調用'$(「form#NewSearchTerm」)。submit();'並且實際上,submit調用的形式來自ajax調用的成功回調以進行服務器端驗證。當表單被錯誤地提交時,它不在客戶端上驗證,它不在服務器上驗證,而是繞過所有代碼。 – CodeWarrior

+1

您需要攔截表單上的提交事件,並使用preventDefault阻止提交。需要看到你的JS來幫助。 –

+0

雖然它不是一個大問題(事實上它幾乎不影響任何事情,因爲服務器上有驗證來處理它,而表單提交處理已到位,它似乎嘗試多次提交表單。將會發布我在上面實現的處理程序代碼,這是我做出的唯一修改,所以我無法弄清楚它爲什麼會重複嘗試它,儘管如此,我仍會繼續並標記爲答案 – CodeWarrior