我是新来的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