我是新來的jQuery,我試圖使用它和驗證插件(http://docs.jquery.com/Plugins/Validation)來創建一個包含多個選項卡的不同部分的多部分表單。現在我有它有多個選項卡,並且「下一步」按鈕切換到下一個選項卡。Jquery驗證多個選項卡,一次驗證一個選項卡?
我遇到的問題是,當我最後在最後一頁上提交時,表單驗證正確,但如果在其他頁面上有錯誤,用戶不會收到通知,並且驗證實際上只發生一次「提交」被點擊。
當我點擊「下一步」時,我將如何驗證每個單獨的?我真的不想創建多個表單或跟蹤隱藏的字段:S有什麼建議嗎?
謝謝!
<script type="text/javascript">
$(document).ready(function() {
//....stuff
//tabs
var tabs = $("#tabs").tabs();
$(".nexttab").click(function() {
//var selected = $("#tabs").tabs("option", "selected");
//$("#tabs").tabs("option", "selected", selected + 1);
$("#tabs").tabs("select", this.hash);
});
//use link to submit form instead of button
$("a[id=submit]").click(function(){
$(this).parents("form").submit();
});
//form validation
var validator = $("#myForm").validate();
});
</script>
<form class="cmxform" id="myForm" method="post" action="">
<div id="tabs">
<ul>
<li><a href="#general">General</a></li>
<li><a href="#tab2"></a></li>
</ul>
<div id="general">
....stuff...
<p>
<a class="nexttab navbutton" href="#tab2"><span>Next</span></a>
</p>
</div>
<div id="tab2">
<h2>Tab2</h2>
<p>
<a class="nexttab navbutton" href="#general"><span>Prev</span></a>
<a class="submit navbutton" id="submit" href="#"><span>Submit</span></a>
</p>
</div>
</div>
</form>
編輯:
@Andrew:
我做你的第二個示例和禁用標籤的某種組合。似乎工作,除了刷新頁面重新禁用標籤。
var tabs = $("#tabs").tabs({
disabled: [1,2,3,4,5],
select: function(event, ui) {
var valid = true;
var current = $(this).tabs("option", "selected");
var panelId = $("#tabs ul a").eq(current).attr("href");
if(ui.index > current)
{
$(panelId).find("input").each(function() {
//console.log(valid);
if (!validator.element(this) && valid) {
valid = false;
}
});
}
return valid;
}
});
在結合:
$(".nexttab").click(function() {
var selected = $("#tabs").tabs("option", "selected");
$("#tabs").tabs("enable", selected+1);
$("#tabs").tabs("option", "selected", selected + 1);
});
嗯,謝謝隊友!除了你提到的問題之外,第二種方法會很好。也許有一種方法可以找到選項卡的順序,如果點擊的id小於/在當前選項卡之前,則返回true。 我可能會用第一種方式去,然後最初禁用右邊的標籤,直到它被第一次訪問。有關如何做到這一點的任何建議? – Jordan 2011-04-13 02:58:03
@Jordan:你總是可以確定被導航的索引是否小於當前標籤索引(對於方法2,我會更新示例)。但是,無論哪種情況,您還必須考慮用戶從一個標籤點擊到另一個標籤時發生的交互,並跳過一些包含必填字段的標籤。在這種情況下會發生什麼?也許你應該只允許用戶每次前進一個標籤。 – 2011-04-13 03:03:18
是的,我想阻止用戶最初跳到另一個選項卡,但我不介意他們在到達/解鎖選項卡後跳到選項卡。第2個例子會這樣嗎?另一件要考慮的事情是人們刷新頁面什麼的。謝謝:) – Jordan 2011-04-13 03:27:47