MVC强制对元素组进行jQueryvalidation
我用MVC 4devise的表单具有多个DIVS,每个DIVS中都有很多元素。 我的目标是在用户完成字段时打开/closuresDIVS。 但是,我想对每个DIV使用不显眼的validation,而不是整个表单。 这可能没有单独检查每个元素? 也许使用DIV ID或什么的? 我不想构build这个庞大的函数来检查每个DIV中的每个元素,只有这样用户才能移动到下一个DIV。
我正在尝试这个,它不工作:
var elems = []; var valid = true; ("#Contact").find('.text_input').each(function() { elems.push(this.id); } for (var i = 0; i<= elems.length; i++) { if ($("#" + elems[i]) != undefined) { $("#form1").validate().element("#" + elems[i])) if ($("#" + elems[i]).valid()) { } else { valid = false; } } }
但我不断收到一个未定义的错误。 DIV中具有text_input类的元素是需要validation的元素。
您可以使用Validator.element(element)
validation单个控件 – 请参阅此处的文档 ,以便您可以使用以下方法(您没有发布视图html,因此无法为您编写实际的代码)
在下一步button单击事件
- select关联
div
所有控件 – 例如var controls = $(this).closest('div').find('input, textarea, select');
- 在
$.each
循环中调用$("form").validate().element($(this));
- 如有必要,testing
$(this).valid();
是否有效$(this).valid();
- 如果一切都有效,隐藏当前div并显示下一个
编辑 (添加示例)
视图
<div class="section"> <h2>Section 1</h2> .... // Your inputs and validation @Html.LabelFor(m => m.SomeProperty) @Html.TextBoxFor(m => m.SomeProperty) @Html.ValidationMessageFor(m => m.SomeProperty) <div class="error"></div> <button type="button" class="next">Next</button> </div> <div class="section"> <h2>Section 2</h2> .... // Your inputs and validation <div class="error"></div> <button type="button" class="next">Next</button> </div> <div class="section"> <h2>Section 3</h2> .... // Your inputs and validation <div class="error"></div> <button type="submit" class="next">Submit</button> // submit button for last section </div>
CSS
.section:not(:first-of-type) { display:none; }
脚本
$('button').click(function () { var container = $(this).closest('.section'); var isValid = true; $.each(container.find('input'), function () { $('form').validate().element($(this)); if (!$(this).valid()) { isValid = false; return false; } }); if (isValid) { container.next('.section').show().find('input').first().focus(); container.hide(); } else { container.find('.error').text('please complete'); } });