2010-09-09 147 views
0

我有一個城市的SVG地圖,當點擊時,在我的窗體中創建一個div中的隱藏元素。jQuery驗證:在提交之前刪除驗證後的元素?

我正在使用jQuery Validation Plugin來驗證我的表單。

爲了確保用戶點擊了地圖的一個區域,我想在隱藏元素的正常隱藏區域內創建一個虛擬隱藏元素,並在其上放置驗證規則。我編寫了自己的驗證規則來檢查隱藏元素的數量(表明用戶已經在地圖上的某處點擊了)。這條規則是這樣的:

$.validator.methods.zones = function (value, element, param) { 
    return ($('#search_form #zone-selectors input').length > 1); // 1 instead of 0 to account for the dummy element 
}; 

<div id="zone-selectors"> 
    <input type="hidden" name="dummy"> 
</div> 

但是,我不能允許該虛擬元素與表單的其餘部分一起提交;我需要在表單被驗證之後但在表單提交之前刪除它。當然,我想用submitHandler選項validate()

// ... 
submitHandler: function(form) { 
    $(form).find('input[name=dummy]').remove(); 
    $(form).submit(); 
}, 
// ... 

...但是這似乎產生了一個無限循環,和我的瀏覽器超時的腳本。我究竟做錯了什麼?

回答

1

submitHandler需要一個調整,像這樣:

submitHandler: function(form) { 
    $(form).find('input[name=dummy]').remove(); 
    form.submit(); 
} 

調用了jQuery .submit()再次觸發導致驗證,並無限循環......你想在這裏調用本地.submit()功能。

+0

現在表格完全不提交...?但隱藏的元素被刪除,所以我知道'submitHandler'正在被調用。 – neezer 2010-09-09 15:12:08

+0

@neezer - 表單是否有動作?或者你想通過ajax提交? – 2010-09-09 15:16:10

+0

@nick它有一個動作。我想要一個正常的提交,而不是一個Ajax提交。 – neezer 2010-09-09 15:34:37

0

這似乎適用於我,當上面的答案沒有。也許與jQuery和jQuery驗證版本有關。

submitHandler: function(form) { 
    $('input[name=dummy]', form).remove(); 
    form.submit(); 
}