>  기사  >  웹 프론트엔드  >  jQuery 유효성 검사 플러그인 원격 확인 방법에 대한 버그 솔루션_jquery

jQuery 유효성 검사 플러그인 원격 확인 방법에 대한 버그 솔루션_jquery

WBOY
WBOY원래의
2016-05-16 18:24:00975검색

그런데 이상한 점은 최근에 사용해보면 좀 이상한 느낌이 든다는 것인데, 좀 딱딱한 것 같아서 기존 기능의 적응력이 부족하고, 이상한 버그까지 생기네요. 어느 프로젝트에나 버그가 있는 것은 당연한 일이지만, 이 버그는 사실 문서에 기록된 기능이지만 아직 구현되지 않은 기능이라 다소 무리가 있습니다. 이 문제는 원격 검증 방법에 있습니다. 다행히 수정이 매우 쉽습니다. 나중에 참고할 수 있도록 여기에 기록하겠습니다.
양식 확인 중에 사용자 등록 시 사용자 이름이 존재하는지 확인하는 등의 판단을 위해 서버에 AJAX 요청을 보내야 하는 경우가 있습니다. jQuery 유효성 검사 플러그인은 이를 달성하기 위한 원격 방법을 제공합니다. 예를 들어 다음과 같이 양식을 확인할 수 있습니다.

코드 복사 코드는 다음과 같습니다.



<script>$( '#regForm').validate({ <BR>'규칙': { <BR>'사용자 이름': { <BR>'필수': true, <BR>'원격': '/ account/verify' <BR> }}) <BR></script>

이러한 방식으로 jQuery 유효성 검사는 "/account/verify?userName=jeffz"와 같은 URL을 요청합니다. 참/거짓을 얻으려면. 안타깝게도 ASP.NET MVC를 사용할 때 DefaultModelBinder의 강력한 바인딩 기능을 활용하기 위해 입력 이름을 특정 형식으로 작성하는 경우가 많습니다. 예:


동시에 검증에 사용하는 작업 메서드의 매개변수 이름도 다를 수 있습니다.


public ActionResult verify(string name) { ... }


문서 설명
에 따르면 여기에서 다음과 같이 작성해야 합니다.
$( '#regForm').validate({
'규칙': {
'user.Name': {
'remote': {
url: '/account/verify',
data: {
name: function( ) { return $("#userName").val() }
}}}}}) 그러나 실제 결과적으로 jQuery는 여전히 "/account /verify?user.Name=jeffz"를 요청하고 있습니다. 당황스럽습니다. 세 번 확인한 후 jquery.validation.js 소스 코드를 읽은 후 거의 기절할 뻔했습니다.



코드 복사
코드는 다음과 같습니다. remote: function(value, element, param) { if ( this.ional(element) ) return "dependent-mismatch";
...
param = typeof param == "string" && {url:param} || param
if (previous.old !== value ) {
previous.old = value; ;
var validator = this;
this.startRequest(element);
var data = {};
data[element.name] = value; 이름?
$.ajax($.extend(true, {
url: param,
mode: "abort",
port: "validate" element.name,
dataType: "json" ,
data: data,
success: function(response) {
...


정말 이상해요. 왜 이런 일이 일어나는지 모르겠어요. 지정된 효과가 전혀 없습니다. 그런 다음 매개변수 이름의 역할을 변경하십시오.



코드를 복사하십시오.
코드는 다음과 같습니다. 다음: remote: function(value, element, param) { if (this.ional(element)) return "dependent-mismatch";
param = typeof param == "string" && {url:param} || param
if (previous.old !== value) {
previous.old = value; = this;
this.startRequest(element);
var data =
data[element.name] = value
$.extend(true, {
// url: param,
url: param .url,
mode: "abort",
port: "validate" element.name,
dataType: "json",
/ / data: data,
data: param.data || data,
success: function(response) {
...


두 군데만 수정하면 문제가 발생합니다. 아쉽게도 jquery.validate.min.js는 비슷합니다.
이런 문제가 발생한다는 것이 정말 당황스럽습니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.