Jquery ui MVC强制对一组元素进行jQuery验证

Jquery ui MVC强制对一组元素进行jQuery验证,jquery-ui,asp.net-mvc-4,Jquery Ui,Asp.net Mvc 4,我用MVC4设计的表单有多个div,每个div中有许多元素。我的目标是在用户完成字段时打开/关闭div。但是,我希望对每个DIV使用不引人注目的验证,而不是整个表单。不单独检查每个元素是否可能?也许用一个DIV ID什么的?我不想构建这个庞大的函数来检查每个DIV中的每个元素,这样用户就可以移动到下一个DIV 我正在尝试,但它不起作用: var elems = []; var valid = true; ("#Contact").find('.text_input').each(funct

我用MVC4设计的表单有多个div,每个div中有许多元素。我的目标是在用户完成字段时打开/关闭div。但是,我希望对每个DIV使用不引人注目的验证,而不是整个表单。不单独检查每个元素是否可能?也许用一个DIV ID什么的?我不想构建这个庞大的函数来检查每个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;
           }
        }
   }
var elems=[];
var valid=true;
(“#Contact”).find(“.text_input”).each(function(){
元素推(this.id);
}

对于(var i=0;i您可以使用
Validator.element(element)
-验证单个控件,因此可以使用以下方法(您尚未发布视图html,因此无法为您编写实际代码)

在下一步按钮中,单击事件

  • 选择中的所有控件 关联的
    div
    -例如
    var controls=$(this)。最近的('div')。查找('input,textarea,select');
  • $循环中,调用
    $(“form”).validate().element($(this));
  • 如有必要,使用
    $(this.valid();
  • 如果所有内容都有效,则隐藏当前div并显示下一个div
  • 编辑(添加示例)

    看法

    剧本

    $('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');
      }
    });
    

    什么时候验证div中的元素?例如,当div中的最后一个元素失去焦点时,或者当您单击按钮显示下一个div时?在这种情况下,当用户单击next时,它调用一个函数来隐藏第一个div并显示第二个div。但是我想在显示第二个div之前检查第一个div中的元素?这有意义吗?检查我的编辑,让我知道为什么不起作用没有理由将其放入数组中。在
    var controls=…
    之后,然后
    $。每个(控件、函数(索引、项){$(“#form1”).validate().element($(this));
    -或者它可能需要是
    .element($(this)[0])
    -未经测试不确定您能否为我写出函数?太晚了-我会看一看tommorow@StephenMuecke,很好的解决方案。非常简单,代码不多。
    .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');
      }
    });