我们可以使用带有jquery验证器的通配符

时间:2016-03-30 18:24:54

标签: jquery jquery-validate

当元素名称未修复时,我们可以在那里使用通配符来指定名称。

代码下面的

将起作用

<script type="text/javascript">
$(document).ready(function () {


    $('#myform').validate({
    rules: {
        $("[name^=test]"): {
        required: true,
        maxlength: 1
        }
    },
    messages: {
        $("[name^=test]"): {
        required: "You must check at least 1 box",
        maxlength: "Check no more than {0} boxes"
        }
    },
    submitHandler: function (form) { // for demo
        alert('valid form submitted'); // for demo
        return false; // for demo
    }
    });


});
    </script>
</head>
<body> 
<form id="myform" runat="server"> 
<input type="checkbox" id="chk1" name="test_1_p1" class="clschk" />x 
<input type="checkbox" id="chk2" name="test_2_p2" class="clschk"/>y 
<input type="checkbox" id="chk3" name="test_3_p3" class="clschk"/>z 
<input id="age" type="text" name="age" /> <input type="submit" /> 
</form> 
</body> 
</html>

1 个答案:

答案 0 :(得分:0)

我认为实现这一目标的最佳方法是考虑:

  1. validate(规则和消息)的参数是json对象。
  2. 如果json对象必须具有dymanic内容,则可以在运行时创建
  3. 您需要自定义规则来检测所选复选框的最大数量
  4. 您需要定义一个函数来定义相应的错误消息(最大值不能写在多个地方以避免混淆和副作用)。
  5. 因此,您的问题的可能解决方案可以是:

    &#13;
    &#13;
    // global variable to save the validator object
    var validator;
    
    
    // a new rule to test if the selected checkboxes are more than the max or less than one
    $.validator.addMethod('checkboxMax', function (value, elem, param) {
      var cacheCheckedElements = $('[name^=test]:checked');
      if (cacheCheckedElements.length < 1 || cacheCheckedElements.length > param.max) {
        return false;
      } else {
        validator.resetForm();
        return true;
      }
    });
    
    
    $(function () {
      // on ready: create the two json object: rules and messages
      var myRules = {};
      var myMessages = {};
      $('[name^=test]').each(function (index, element) {
        myRules[element.name] = {
          checkboxMax: {
            max: 2
          }
        };
        myMessages[element.name] = {
          checkboxMax: function(params, element) {
            return 'Check no more than ' + params.max + ' boxes ';
          }
        };
      });
      
      // use the previous fields (myRules and myMessages) as arguments
      validator = $('#myform').validate({
        rules: myRules,
        messages: myMessages,
        submitHandler: function (form) { // for demo
          alert('valid form submitted'); // for demo
          return false; // for demo
        }
      });
    });
    &#13;
    <script src="https://code.jquery.com/jquery-1.12.1.min.js"></script>
    <script src="https://cdn.jsdelivr.net/jquery.validation/1.15.0/jquery.validate.min.js"></script>
    
    <form id="myform" runat="server">
        <input type="checkbox" id="chk1" name="test_1_p1" class="clschk"/>x
        <input type="checkbox" id="chk2" name="test_2_p2" class="clschk"/>y
        <input type="checkbox" id="chk3" name="test_3_p3" class="clschk"/>z
        <input id="age" type="text" name="age"/> <input type="submit"/>
    </form>
    &#13;
    &#13;
    &#13;