ProgramingTip

이름 값 대신 클래스를 사용하는 jQuery 유효성 검사

bestdevel 2021. 1. 5. 21:17
반응형

이름 값 대신 클래스를 사용하는 jQuery 유효성 검사


jquery validate 유효성을 검사하고 싶지만 html 내에서 '이름'을 사용할 수 없습니다. 이것은 서버에서 사용되는 필드이기 때문입니다. 특히 그룹에서 선택하는 선택의 수를 제한해야합니다. (최대 3 개) 내가 본 모든 예제는 각 요소의 이름 속성을 사용합니다. 내가하고 싶은 것은 클래스를 대신 사용하고 그에 대한 규칙을 선언하는 것입니다.

HTML

작동합니다 :

<input class="checkBox" type="checkbox" id="i0000zxthy" name="salutation"  value="1" />

이것은 작동하지 않지만 내가 목표로하는 것입니다.

<input class="checkBox" type="checkbox" id="i0000zxthy" name="i0000zxthy"  value="1" />

자바 펼쳐 :

var validator = $(".formToValidate").validate({    
    rules:{     
    "salutation":{  
             required:true,  
        },  
        "checkBox":{  
             required:true,  
          minlength:3  }  
   }   
});

이것이 가능한 방법?-규칙 옵션 내에서 대신 클래스를 대상으로하는 방법이 있습니까? 아니면 사용자 지정 방법을 추가해야합니까?

건배, 매트


를 사용하여 해당 선택기를 기반으로 규칙을 추가하고 유효성 검사 옵션에서 클래스 기반으로 원하는 규칙을 제거하고 한 후 다음을 수행합니다..rules("add", options)$(".formToValidate").validate({... });

$(".checkBox").rules("add", { 
  required:true,  
  minlength:3
});

할 수있는 또 다른 방법은 addClassRules를 사용하는 입니다. 클래스에 따라 다르지만 선택기와 .rules를 사용하는 옵션은보다 일반적인 방법입니다.

전화하기 전에

$(form).validate()

다음과 같이 사용하십시오.

jQuery.validator.addClassRules('myClassName', {
        required: true /*,
        other rules */
    });

참조 : http://docs.jquery.com/Plugins/Validation/Validator/addClassRules#namerules

나는 이와 같은 경우 에이 구문을 선호합니다.


나는 이것이 오래된 질문이라는 것을 알고 있습니다. 하지만 나도 최근에 같은 것이 필요하고,이 질문은 stackoverflow +이 블로그의 또 다른 답변에서 얻었습니다. 블로그에있는 진보은 다만 종류의 유효성 검사에 한정을 맞추기 때문에 더 간단했습니다. 방법은 다음과 가변합니다.

$.validator.addClassRules("price", {
     required: true,
     minlength: 2
});

이 메서드는 호출에 메서드를 필요로하지 않습니다.

이것이 미래의 누군가에게 도움이되기를 바랍니다. 여기에 소스 .


다음은 jQuery를 사용하는 솔루션입니다.

    $().ready(function () {
        $(".formToValidate").validate();
        $(".checkBox").each(function (item) {
            $(this).rules("add", {
                required: true,
                minlength:3
            });
        });
    });

내 솔루션은 다음과 같습니다 (jQuery가 필요하지 않습니다 ... JavaScript 만).

function argsToArray(args) {
  var r = []; for (var i = 0; i < args.length; i++)
    r.push(args[i]);
  return r;
}
function bind() {
  var initArgs = argsToArray(arguments);
  var fx =        initArgs.shift();
  var tObj =      initArgs.shift();
  var args =      initArgs;
  return function() {
    return fx.apply(tObj, args.concat(argsToArray(arguments)));
  };
}
var salutation = argsToArray(document.getElementsByClassName('salutation'));
salutation.forEach(function(checkbox) {
  checkbox.addEventListener('change', bind(function(checkbox, salutation) {
    var numChecked = salutation.filter(function(checkbox) { return checkbox.checked; }).length;
    if (numChecked >= 4)
      checkbox.checked = false;
  }, null, checkbox, salutation), false);
});

펼쳐 블록의 이것을 끝에 넣으면 <body>스 니펫이 마법을 수행하여 체크 박스의 수를 최대 3 개 (또는 지정한 수)로 제한합니다.

여기에서는 페이지도 제공 할 것입니다.

<!DOCTYPE html><html><body>
<input type="checkbox" class="salutation">
<input type="checkbox" class="salutation">
<input type="checkbox" class="salutation">
<input type="checkbox" class="salutation">
<input type="checkbox" class="salutation">
<input type="checkbox" class="salutation">
<input type="checkbox" class="salutation">
<input type="checkbox" class="salutation">
<input type="checkbox" class="salutation">
<input type="checkbox" class="salutation">
<script>
    function argsToArray(args) {
      var r = []; for (var i = 0; i < args.length; i++)
        r.push(args[i]);
      return r;
    }
    function bind() {
      var initArgs = argsToArray(arguments);
      var fx =        initArgs.shift();
      var tObj =      initArgs.shift();
      var args =      initArgs;
      return function() {
        return fx.apply(tObj, args.concat(argsToArray(arguments)));
      };
    }
    var salutation = argsToArray(document.getElementsByClassName('salutation'));
    salutation.forEach(function(checkbox) {
      checkbox.addEventListener('change', bind(function(checkbox, salutation) {
        var numChecked = salutation.filter(function(checkbox) { return checkbox.checked; }).length;
        if (numChecked >= 3)
          checkbox.checked = false;
      }, null, checkbox, salutation), false);
    });
</script></body></html>

나를 위해, 일부 요소는 페이지로드시 생성되고 일부는 사용자가 동적으로 추가합니다. 나는 이것을 사용하여 모든 것이 건조하게 유지했습니다.

출시시, 클래스 x가있는 모든 항목을 찾고, 클래스 x를 제거하고, 규칙 x를 추가하십시오.

$('#form').on('submit', function(e) {
    $('.alphanumeric_dash').each(function() {
        var $this = $(this);
        $this.removeClass('alphanumeric_dash');
        $(this).rules('add', {
            alphanumeric_dash: true
        });
    });
});

사용자 정의 방법을 추가 할 수 있습니다.

(이 경우 하나 이상의 선택됨)

<input class="checkBox" type="checkbox" id="i0000zxthy" name="i0000zxthy"  value="1" onclick="test($(this))"/>

자바 펼쳐

var tags = 0;

$(document).ready(function() {   

    $.validator.addMethod('arrayminimo', function(value) {
        return tags > 0
    }, 'Selezionare almeno un Opzione');

    $.validator.addClassRules('check_secondario', {
        arrayminimo: true,

    });

    validaFormRichiesta();
});

function validaFormRichiesta() {
    $("#form").validate({
        ......
    });
}

function test(n) {
    if (n.prop("checked")) {
        tags++;
    } else {
        tags--;
    }
}

참조 URL : https://stackoverflow.com/questions/2780288/jquery-validation-using-the-class-instead-of-the-name-value

반응형