jQuery按钮一次validation表单的一部分
对不起,如果我没有清楚地解释我的问题。
- 我有一个表格,有多个表供用户输入。
- 我使用
next
和back
按钮来隐藏和显示不同的表格以引导用户。
现在问题是:如何使用next
按钮来validation当前活动表输入? 例如,每次用户单击next
,它将检查是否所有字段都已填满?
这是一个破碎的DEMO 。 谢谢你的评论!
HTML
JS
$(document).ready(function() { var tab_pool = ["tab_Chemical", "tab_Crop", "tab_Physical"]; var visible = $(".tab:visible").attr('class').split(" ")[1]; var curr_ind = $.inArray(visible, tab_pool); $(".submit").hide(); $(".back").hide(); $('.next').click(function() { if (curr_ind 0) { $(".tab:visible").hide(); curr_ind = curr_ind - 1; $("." + tab_pool[curr_ind]).show(); $(".submit").hide(); $(".next").show(); } if (curr_ind == 0) { $(".back").hide(); } }); $(".next").click(function() { $(".tab tab_Chemical").validate({ rules: { wat_hl: "required" } }) }) $(".next").click(function() { $(".tab tab_Crop").validate({ rules: { zero_height_ref: "required" } }) }) $(".next").click(function() { $(".tab tab_Physical").validate({ rules: { mas_tras_cof: "required" } }) }) });
使用表单添加validation
var validator = $('form').validate({ ignore: 'input[type="button"],input[type="submit"]', rules: { wat_hl: { required: true }, zero_height_ref: { required : true }, mas_tras_cof: { required: true } } });
然后next
处理程序中
$('.next').click(function () { var tab = $(".tab:visible"); var valid = true; $('input', tab).each(function(i, v){ valid = validator.element(v) && valid; }); if(!valid){ return; } if (curr_ind < 2) { $(".tab:visible").hide(); curr_ind = curr_ind + 1; $("." + tab_pool[curr_ind]).show(); $(".submit").hide(); $(".back").show(); } if (curr_ind == 2) { $(".submit").show(); $(".next").hide(); } });
演示: 小提琴
说明
-
var valid = true
:一个标志,用于通过迭代过程保持选项卡的状态 - $('input',tab).each :遍历当前选项卡中的每个input元素
- validator.element(v)validation选项卡中的每个元素
-
valid = validator.element(v) && valid
:更新选项卡的状态
那这个呢 ?
var isOpenedTabValid = $(".tab:visible :input").valid();
我有一个实现来获得相同的结果。 我添加了带有role =“form”参数的div元素。 然后validation每个div上的元素,因为它就像一个表单,而主表单仍在环绕。
这个jQuery代码检查特定div中是否有任何错误
var elmForm = $("#form-step-0"); elmForm.validator('validate');
以下代码将检查特定div中是否有任何错误输入
var elmErr = elmForm.children('.has-error'); if(elmErr && elmErr.length > 0){ // Error elements found, Form validation failed return false; }
当你想validation整个表单时,只需使用普通代码即可
var elmForm = $("#myForm"); elmForm.validator('validate'); var elmErr = elmForm.find('.has-error'); if(elmErr && elmErr.length > 0){ alert('Oops we still have error in the form'); return false; }else{ alert('Great! we are ready to submit form'); elmForm.submit(); return false; }
这是GitHub上的源文件
这是一个演示实现
每次单击下一个按钮时,都要为每个表调用validate方法。 相反,您只想在表可见时调用validate。 由于您已经使用curr_ind跟踪哪个表应该可见,因此我建议使用它来了解要validation的表,并且只对可见表调用validate。