jQuery Validate Plugin-간단한 커스텀 규칙을 만드는 방법?


351

addMethod정규식을 사용하지 않는 jQuery Validate 플러그인을 사용하여 간단한 사용자 정의 규칙을 작성하는 방법은 무엇입니까?

예를 들어 확인란 그룹 중 하나 이상을 선택한 경우에만 유효성을 검사하는 규칙을 만드는 기능은 무엇입니까?


41
95 upvotes, 나는이 평균 추측 bassistance.de/jquery-plugins/jquery-plugin-validation의 문서가 불분명 수 있습니다 : P
시몬 아놀드

아직 검색 중인지 모르지만 (4 년 후) 이것은 learn.jquery.com/plugins/…에
Ron van der Heijden

답변:


376

다음과 같은 방법으로 간단한 규칙을 만들 수 있습니다.

jQuery.validator.addMethod("greaterThanZero", function(value, element) {
    return this.optional(element) || (parseFloat(value) > 0);
}, "* Amount must be greater than zero");

그런 다음 이렇게 적용하십시오.

$('validatorElement').validate({
    rules : {
        amount : { greaterThanZero : true }
    }
});

'addMethod'의 내용을 변경하여 확인란의 유효성을 검사하십시오.


23
this.optional (element) 무엇입니까 || 그 기능을하고 있습니까? 모든 규칙에 해당되는 것처럼 보이지만 "필수"를 제외한 모든 규칙과 관련이있는 이유는 알 수 없습니다.
machineghost

38
이를 생략하면 요소가 필요하지 않은 경우에도 메소드가 항상 적용됩니다.
Mark Spangler

element.가 null이면 this.optional (element)가 true를 반환한다고 생각합니다.
tnunamak

12
실행하려면 "금액"이 페이지에있는 일부 요소의 ID와 이름이어야합니까?
Hoàng Long

6
예, amount는 일부 입력 양식 필드의 이름 속성을 나타냅니다.
Mark Spangler

96
$(document).ready(function(){
    var response;
    $.validator.addMethod(
        "uniqueUserName", 
        function(value, element) {
            $.ajax({
                type: "POST",
                url: "http://"+location.host+"/checkUser.php",
                data: "checkUsername="+value,
                dataType:"html",
                success: function(msg)
                {
                    //If username exists, set response to true
                    response = ( msg == 'true' ) ? true : false;
                }
             });
            return response;
        },
        "Username is Already Taken"
    );

    $("#regFormPart1").validate({
        username: {
            required: true,
            minlength: 8,
            uniqueUserName: true
        },
        messages: {
            username: {
                required: "Username is required",
                minlength: "Username must be at least 8 characters",
                uniqueUserName: "This Username is taken already"
            }
        }
    });
});

나는이 방법을 시도했지만 꽤 잘 작동하지만 사실보다 다른 메시지를 반환하는 남자는 여전히 "확인"을 확인하지 않고 "사용자 이름이 이미 사용되었습니다"에 붙어 있습니다. 또한 false와 true를 반환하는 대신 값을 에코하여 올바르게 반환되는지 확인했으며 작동합니다. 내 브라우저가 false 반환, 픽업 true를 선택하지 않는 것 같습니다. 이것은 나를 미치게하고있다 ..
Mikelangelo

1
addmethod 앞에 result라는 변수를 삽입하여 작동시키는 것으로, 성공한 함수 내에 잘못된 값이 제대로 등록되어있는 것 같습니다.
Mikelangelo

23
이것을 조심하십시오. 이것은 AJAX "성공"이 '반환 응답'후에 돌아올 것이라는 점에서 완전히 기능적인 코드는 아닙니다. 실행 예기치 ​​않은 동작이 발생
Malachi

1
@ 말라 치가 맞습니다. 대신 동기화 호출을 수행하여 해결할 수 있지만 불쾌합니다. 이것을 달성하는 다른 방법이 있는지 궁금합니다. 이 remote다른 제안하지만, 그렇지 않은 작업을 두 개의 비동기 검증에 필요하거나 응답에 따라 여러 가지 오류 메시지가한다면, 그래서 지금까지 내가 말할 수있는 그 단지 하나 개의 검증을 허용하는.
Adam Bergmark

2
jquery validate를위한 원격 메소드가 있습니다 : jqueryvalidation.org/remote-method
TecHunter

70
// add a method. calls one built-in method, too.
jQuery.validator.addMethod("optdate", function(value, element) {
        return jQuery.validator.methods['date'].call(
            this,value,element
        )||value==("0000/00/00");
    }, "Please enter a valid date."
);

// connect it to a css class
jQuery.validator.addClassRules({
    optdate : { optdate : true }    
});

7
addClassRules는 대답에 좋은 추가 기능입니다.
4

@commonpike 이것은 내가 찾던 것입니다. 감사합니다.
Simba

46

사용자 정의 규칙 및 데이터 속성

data구문을 사용 하여 사용자 정의 규칙을 작성하고 속성을 사용하여 요소에 첨부 할 수 있습니다.data-rule-rulename="true";

따라서 확인란 그룹 중 하나 이상이 선택되어 있는지 확인하려면 다음을 수행하십시오.

데이터 규칙 하나 이상

<input type="checkbox" name="colours[]" value="red" data-rule-oneormorechecked="true" />

addMethod

$.validator.addMethod("oneormorechecked", function(value, element) {
   return $('input[name="' + element.name + '"]:checked').length > 0;
}, "Atleast 1 must be selected");

또한 구문을 사용하여 규칙 메시지 (예 : Atleast 1을 선택해야 함) 를 무시할 수 있습니다 data-msg-rulename="my new message".

노트

data-rule-rulename방법을 사용하는 경우 규칙 이름이 모두 소문자인지 확인해야합니다. jQuery 유효성 검사 기능 이 비교에 dataRules적용 .toLowerCase()되고 HTML5 사양이 대문자를 허용하지 않기 때문입니다.

작업 예

$.validator.addMethod("oneormorechecked", function(value, element) {
  return $('input[name="' + element.name + '"]:checked').length > 0;
}, "Atleast 1 must be selected");

$('.validate').validate();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.14.0/jquery.validate.min.js"></script>

<form class="validate">
    red<input type="checkbox" name="colours[]" value="red" data-rule-oneormorechecked="true" data-msg-oneormorechecked="Check one or more!" /><br/>
    blue<input type="checkbox" name="colours[]" value="blue" /><br/>
    green<input type="checkbox" name="colours[]" value="green" /><br/>
    <input type="submit" value="submit"/>
</form>


2
jquery.validate ver> = 1.10에만 해당
Pavel Nazarov 2011

나는 내 인생에서 공식 문서에서 이것을 찾을 수 없었습니다. 감사!
Josh Mc

22

고마워요!

최종 코드는 다음과 같습니다.

$.validator.addMethod("greaterThanZero", function(value, element) {
    var the_list_array = $("#some_form .super_item:checked");
    return the_list_array.length > 0;
}, "* Please check at least one check box");

13

다음과 같이 사용자 지정 규칙을 추가 할 수 있습니다.

$.validator.addMethod(
    'booleanRequired',
    function (value, element, requiredValue) {
        return value === requiredValue;
    },
    'Please check your input.'
);

그리고 다음과 같이 규칙으로 추가하십시오.

PhoneToggle: {
    booleanRequired: 'on'
}        

1

이 경우 : 사용자 가입 양식, 사용자는 사용하지 않는 사용자 이름을 선택해야합니다.

즉, 원격 서버와 비동기 http 요청을 보내는 사용자 지정 유효성 검사 규칙을 만들어야합니다.

  1. html에 입력 요소를 만듭니다.
<input name="user_name" type="text" >
  1. 양식 유효성 검사 규칙을 선언하십시오.
  $("form").validate({
    rules: {
      'user_name': {
        //  here jquery validate will start a GET request, to 
        //  /interface/users/is_username_valid?user_name=<input_value>
        //  the response should be "raw text", with content "true" or "false" only
        remote: '/interface/users/is_username_valid'
      },
    },
  1. 원격 코드는 다음과 같아야합니다.
class Interface::UsersController < ActionController::Base
  def is_username_valid
    render :text => !User.exists?(:user_name => params[:user_name])
  end
end
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.