2016-09-07 89 views
1

我正在使用jquery验证器,输入字段为空并显示其值为空,但jquery valid()方法始终返回true。实际上,表单中有几个选项卡,每次点击下一个选项卡时都会显示,之前会隐藏。所以,我们不能验证所有形式一次我的验证规则给定为:jquery验证器的valid()方法总是返回true

$('#wizard_example_1').validate({ 
    rules: { 
     link_client_name: { 
      required: true 
     }, 
     link_page_url: { 
      required: true, 
      url: true 
     }, 
     link_title: { 
      required: true 
     }, 
     link_message: { 
      required: true 
     }, 
     link_text: { 
      required: true 
     }, 
     link_url: { 
      required: true, 
      url: true 
     } 
    } 
}); 

和jQuery代码到specificaly检查元素是否有效或不作为

$('.next-btn').on('click', function (e) { 
    e.preventDefault(); 
    count++; 
    if (obj['camp_type'] === "1") { 
     var valid = false; 
     $.each($('#link input'), function (i, v) { 
      var id=$(this).attr('name'); 
      valid=$('input[name="' + $(this).attr('name') + '"]').valid(); 
     }); 
     if(valid) { 
      obj = {}; 
      obj['camp_type'] = "1"; 
      obj['client_name'] = $('#link_client_name').val(); 
      obj['page_url'] = $('#link_page_url').val(); 
      obj['title'] = $('#link_title').val(); 
      obj['message'] = $('#link_message').val(); 
      obj['action_text'] = $('#link_text').val(); 
      obj['action_url'] = $('#link_action_url').val(); 
      console.log(obj); 
     }else{ 
      return false; 
     } 
    } 
}); 
+0

'valid'将永远是最后一次迭代的结果'$ .each' –

+0

好吧,我承认这一点,但如果最后一个元素是空的,那么它应该返回false,但它返回true –

+0

对于这样的情况,我喜欢使用编程验证。我已经创建了[egkyron](https://github.com/nikospara/egkyron),还有其他库。 –

回答

2

尝试实施用这种方法。

var $ValidateForm = $('#wizard_example_1').validate({ 
 
    rules: { 
 
     link_client_name: { 
 
      required: true 
 
     }, 
 
     link_page_url: { 
 
      required: true, 
 
      url: true 
 
     }, 
 
     link_title: { 
 
      required: true 
 
     }, 
 
     link_message: { 
 
      required: true 
 
     }, 
 
     link_text: { 
 
      required: true 
 
     }, 
 
     link_url: { 
 
      required: true, 
 
      url: true 
 
     } 
 
    } 
 
}); 
 

 
$('.next-btn').off(); 
 
    $(document).on('click', '.next-btn', function() { 
 
        if ($ValidateForm.form()) { 
 
         // your logic 
 
} 
 
       });

+0

实际上,表单内部有几个标签,每个下一个标签的点击都会显示出来,而前一个标签会隐藏起来。所以我们不能立即验证所有表单 –