2017-12-17 11 views
0
$('#foo').validate({ 
    errorPlacement: (e, el) => { 
    /** 
    * /* Insert .error after offending <input>'s <label>. 
    */ 
    e.insertAfter(el.next('.form__label')).animate({ 
     opacity: 1, 
     top: '-=10px', 
    }, 'fast'); 
    }, 
    messages: { 
    tc: 'Please accept our Terms & Conditions!', 
    }, 
}); 

$('#bar').validate({ 
    errorPlacement: (e, el) => { 
    /** 
    * /* Insert .error after offending <input>'s <label>. 
    */ 
    e.insertAfter(el.next('.form__label')).animate({ 
     opacity: 1, 
     top: '-=10px', 
    }, 'fast'); 
    }, 
}); 

내 페이지에 두 개의 다른 <form> 컨테이너가있는 jqueryvalidation.org와 협력하고 있습니다. 이것은 그대로 작동하고 있지만, errorPlacement 오브젝트를 추정 할 수있는 더 좋은 방법이 있다고 확신합니다.복제를 피하기 위해 리팩토링 할 수있는 방법은 무엇입니까?

/** 
* Customize placement of created error labels. 
* (https://jqueryvalidation.org/validate/) 
* @param {$} e created error label 
* @param {$} el invalid element 
*/ 
function ep(e, el) { 
// Insert .error after offending <input>'s <label>. 
    e.insertAfter(el.next('.form__label')).animate({ 
     opacity: 1, 
     top: '-=10px', 
    }, 'fast'); 
} 

$('#foo').validate({ 
    errorPlacement: function ep(e, el) { 
    // Insert .error after offending <input>'s <label>. 
    e.insertAfter(el.next('.form__label')).animate({ 
     opacity: 1, 
     top: '-=10px', 
    }, 'fast'); 
    }, 
    messages: { 
    tc: 'Please accept our Terms & Conditions!', 
    }, 
}); 

$('#bar').validate({ 
    errorPlacement: ep(e, el), // This throws error of 'unknown' e 
}); 
+0

나는 유효성 검사가 메시지와 내용과 같이 각각 다를 것이라고 상상해보십시오. 왜냐하면'$ ('# foo, #bar'). validate ({})' –

+0

@MattFletcher가 없기 때문에,'.validate()'메소드는 절대 그렇게 작동하지 않기 때문이다. 둘 이상의'form'과 일치하는 jQuery 선택기에 연결하면 첫 번째 양식 만 사용되고 나머지는 무시됩니다. [문서를 참조하십시오] (https://jqueryvalidation.org/reference/#link-validating-multiple-forms-on-one-page). 그럼에도 불구하고, OP는 그가 처음에 언급 한대로 각 양식 내에 몇 가지 독특한 옵션이 있음을 보여줍니다. – Sparky

답변

0

이미이 플러그인의 일부인 .setDefaults()이라는 것이 있기 때문에 필요가 없습니다. 내부에 넣은 내용은 페이지의 .validate()의 모든 인스턴스에 대한 기본값이됩니다.

0

당신은 가 호출 된 것을 함수로 호출하는 것입니다 기능을 설정하는 : 난 그냥

나는 이런 식으로 뭔가를 시도 ... 지금 그것을 보이지 않아요.

errorPlacement: ep(e, el)을 수행하면 errorPlacement가 트리거되지 않을 때 객체를 설정할 때 ep(e, el)의 함수 부분이 호출됩니다. 괄호없이 함수 이름 자체를 전달하면됩니다.

$('#bar').validate({ 
    errorPlacement: ep, 
}); 

리펙토링을 가장 잘하는 방법에 대한 질문은 실제로 의견을 말하기에 너무 적합합니다. 그러나 함수를 나누는 것으로 당신이하고있는 일이 올바른 것처럼 보입니다.

+0

또한'top : '- = 10px''가 맞습니까? 전에는 그 구문을 본적이 없으며 틀린 것처럼 보입니다. 그러나 나는 틀릴 수도 있습니다. –

+1

그가 jquery-validate의 그랜드 마스터 인 것처럼 나는 sparky의 옵션으로 갈 것입니다. 그러나 잘하면 내 대답은 여전히 ​​당신이 당신의 오류가 발생 왜 다소 도움이됩니다. –

+0

http://api.jquery.com/animate/ 최상위 위치를 변경할 때 예를 들어 구문을 사용합니다. 나는이 모든 것을 HTML로 약간 변형시킬 수 있기 때문에 아직 이것으로 돌아 가지 않았다. – VisWebsoft