2014-02-06 63 views
0

所以我有一个步骤与一些选定的选择框引导向导。我添加了忽略:':hidden:not(select)'以允许jquery验证来验证所选内容。jquery验证启动向导与选择?

这使箱子验证,但没有在正确的一步。它验证每一步中所有选择的框!

var $validator = $("#register").validate({ 
    ignore: ':hidden:not(select)', 
    rules: { 
     country: { 
      required: true 
     } 
    } 
}); 
$('#registerwiz').bootstrapWizard({ 
    'onNext': function(tab, navigation, index) { 
     var $total = navigation.find('li').length; 
     var $current = index+1; 
     var $percent = ($current/$total) * 100; 
     var $valid = $("#register").valid(); 
     if(!$valid) { 
      $validator.focusInvalid(); 
      return false; 
     } else { 
      $('#registerwiz').find('.progress-bar').css({width:$percent+'%'}); 
     } 
    } 
}); 

所以我想知道如何才能让它只验证在特定步骤选择框。

并且如果可能的话还会在错误警告出现在未选择的框中。

+0

由于'.validate()'是页面上的插件的_ONE-time_初始化,你不能_dynamically_改变'ignore'选项,如果这是你在做什么。您的设置适用于整个表单,以后无法更改。您只能使用'.rules('add')'方法动态更改规则。所以当你设置这个步骤时,只需要'required'来仅仅需要验证的隐藏字段。然后在下一步中,使用'.rules('remove')'等。 – Sparky

+0

我有点理解你在说什么,但我很难将它变成代码。我是否正确地在onNext函数中说if(index == 3){并且在这里添加规则并且} else {在这里删除规则}。这是正确的做法吗? – user1919077

回答

0

添加errorPlacement

errorPlacement: function (error, element) { 
      if (element.is('input[type=checkbox]') || element.is('input[type=radio]')) { 
       var controls = element.closest('div[class*="col-"]'); 
       if (controls.find(':checkbox,:radio').length > 1) controls.append(error); 
       else error.insertAfter(element.nextAll('.lbl:eq(0)').eq(0)); 
      } 
      else if (element.is('.select2')) { 
       error.insertAfter(element.siblings('[class*="select2-container"]:eq(0)')); 
      } 
      else if (element.is('.chosen-select')) { 
       error.insertAfter(element.siblings('[class*="chosen-container"]:eq(0)')); 
      } 
      else error.insertAfter(element.parent()); 
     } 

很好的作品