2012-07-13 4 views
1

사과이 질문에 답을 얻은 후에는 검색 할 때 아무 것도 발굴하지 못했습니다.jQuery 유효성 검사 강조 표시/무시 표시 해제 방법

jQuery 유효성 검사기의 강조 표시 & 해제 방법을 무시하고 있습니다. 그러나 '메서드'의 '스톡'버전을 계속 호출하고 싶습니다. C#에서는 base.unhighlight를 호출하는 것과 같습니다.

필자는 원래 & 붙여 넣기 코드를 복사하여 부모 호출을 시뮬레이트해야합니다.

jQuery.validator.setDefaults({ 
    unhighlight: function (element, errorClass, validClass) { 
     // base.unhighlight(element, errorClass, validClass) // <-- desired functionality 
    ... 

어떻게하면됩니까? 고마워요 -

+0

실용적인 데모가 있습니다. 지금 언제든지 확인해보십시오. –

답변

1

이것이 구조화 된 방식으로, 플러그인을 수정하지 않고 할 수있는 최선의 방법입니다. 그 이유는 setDefault 메소드를 호출 할 때 플러그인의 기본값 복사본을 덮어 씁니다. 이것은 주위를 둘러보기가 힘들지 만, defaults 오브젝트를 &으로 분리하고 다시 참조 할 사본을 만드는 것으로 해결했습니다. 플러그인 소스에서 간단한 논리를 복사하는 것이 더 나은 방법 일 수 있습니다. 왜냐하면 전체 구현을 위해 setDefaults를 한 번 호출해야하기 때문입니다.

내 커밋을 참조하십시오. here & here. 원하면 포크로 자유롭게 움직이십시오.

기본적으로 호출중인 함수에는 _orig (또는 원하는대로)라는 추가 매개 변수가 있습니다. highlight에 대해서도 마찬가지입니다.

unhighlight: function (el, error, valid, _orig) { 
    _orig(el, error, valid); // runs directly from the defaults. 
    // do other stuff. 
} 

다음은 file

편집입니다 : 와우. 해당 플러그인의 범위는 고급입니다. 내 솔루션을 구현하는 데 생각보다 오래 걸렸습니다. 여기에 작동하는 데모가 있습니다 : http://jsfiddle.net/fjMFk/24/

+0

당신이 한 일은 인상적이다. 나는 더 많은 것을 원했다. http://stackoverflow.com/questions/560829/calling-base-method-using-javascript-prototype 연결된 솔루션 – Malachi

+0

불행히도, 플러그인은 연결된 질문처럼 작동하지 않습니다. 이렇게하려면 프로그램의 대부분을 수정해야하므로 업스트림에서 병합 할 수있는 변경 사항을 잃게됩니다. 구문의 어느 부분이 문제가 되는가? –

+0

그냥 일반적으로 저는 JS/jQuery nub =)입니다. 구문을 올바르게 이해할 수 없었기 때문에 어쩌면 prototype.call 방식을 어기고 있다고 생각했습니다. 그러나 핵심 문제는 jQuery 유효성 검사 코드 자체가 어쨌든 지원하지 않는다는 것입니다. – Malachi

3

물론, 다른 방법으로 당신이 제안한 것처럼 소스에서 기본값을 복사하는 것입니다. 내가 다른 답변에서 말했듯이 setDefaults를 한 번 호출하면되기 때문에 더 똑똑한 방법 일 수 있습니다.

jQuery/JS에 얼마나 익숙한 지 잘 모르겠습니다. 하지만 일반적으로 유효성 검사기를 호출 할 때마다 옵션을 전달합니다. 나는 세 가지 형태가있을 경우

그래서, 내가 할 수있는 : 나는 세계적으로 강조 표시 방법을 변경하려는 경우

$('#form1').validate({ 
    unhighlight: function(el, error, valid){ el.append('<div class="errormsg">Required for Form1</div>'); } 
}); 

$('#form2').validate({ 
    unhighlight: function(el, error, valid){ $(el).append('<div class="errormsg">Required for Form2</div>'); } 
}); 

$('#form3').validate({ 
    unhighlight: function(el, error, valid){ $(el).append('<div class="errormsg">Required for Form3</div>'); } 
}); 

을하지만, 내가 할 수있는 :

jQuery.validator.setDefaults({ 
    highlight: function(el, error, valid){ $(el).siblings('.errormsg').remove; } 
}); 

을 그래서 정말 당신 만이 필요합니다 한 번 setDefaults 메서드를 호출합니다. 그리고 확실히 한 번 붙여 넣기를 복사하는 것은 너무 어렵지 않을 것입니다.

관련 문제