2014-02-06 61 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()); 
     } 

很好的作品