2013-02-25 1 views
1

양식 검증을 위해 jquery 유효성 검사 플러그인을 사용하고 있습니다. 나는 취소 기능으로 이상한 것을보고있다. 하나의 이메일 필드, 제출 버튼 및 취소 버튼이있는 양식이 있습니다. 전자 메일 필드에 불완전한 주소를 입력 한 다음 페이지의 아무 곳이나 클릭하지 않고 취소를 클릭하면 유효성 검사기가 전자 메일 필드를 검사하고 필드 옆에 잘못된 메시지를 표시하고 취소 작업을 중지합니다.jquery를 취소하는 방법 취소시 유효성을 검사 하시겠습니까?

관련 질문이있는 곳은 jQuery Validation plugin: disable validation for specified submit buttons입니다. 그것은 내가 필요한 것처럼 보입니다. 그러나 그것은 작동하지 않습니다! 취소 버튼에 "취소"CSS 클래스를 추가했지만 효과가 없습니다.

이 샘플 코드는 내가 보는 문제점을 보여줍니다. FF와 Chrome 모두에서 동작을 보았습니다.

이 샘플에서는 텍스트 입력에 유효하지 않은 전자 메일 주소를 입력 한 다음 다른 것을 클릭하기 전에 취소 버튼을 클릭하면 유효성 검사기가 텍스트 입력 옆에 메시지를 표시하고 취소 작업이 절대로 발생하지 않습니다. 취소를 다시 클릭하면 페이지가 예상대로 다시로드됩니다. 즉, 취소 할 페이지를 얻으려면 취소를 두 번 클릭해야합니다.

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#myForm").validate() 

     $(".cancel").click(function() { 
      location.reload(true) 
     }) 

    }) 
</script> 

<div> 
    <form name="myForm" id="myForm" action="index.html"> 
     <input type="text" class="required email" id="myField" name="myField"/> 
     <input type="submit" value="Submit"/> 
     <input type="submit" value="Cancel" class="cancel"/> 
    </form> 
</div> 

또한 흥미로운 : 나는 JQuery와 유효성 검증 문서 (http://docs.jquery.com/Plugins/Validation/Reference#Skipping_validation_on_submit)에서 볼 수있는 데모를 실행했습니다. 데모를 실행할 때 유효성 검사가 작동하는지 알 수 없습니다. gobbledygook을 입력하고 제출 버튼을 클릭하더라도 이메일 필드가 유효하지 않은 것으로 표시되지 않습니다. 내가 얻은 것은 폼의 submitHandler에 추가 된 간단한 경고입니다. 취소 버튼도 같은 방식으로 작동하므로 취소 클래스를 추가하면 전혀 작동하지 않을 수 있습니다.

저는 FF와 Chrome에서이 기능을 사용하고 있습니다. jquery 1.9.1 및 jquery-validate 1.11.4를 사용하고 있습니다.

+0

'jquery.validate.unobtrusive' (ASP.NET MVC)를 사용하는 경우 기본 동작으로 작동하므로 조금 더 작업해야합니다. 내 질문 [다른 대답] (http://stackoverflow.com/a/17401660/16940) 비슷한 질문. –

+0

@ suchufty, 솔루션을 찾았습니까? 동일한 문제가 발생했습니다 – cosset

답변

6

As per the accepted answer on the question you reference을 추가하면 cancel 클래스를 추가하면 유효성 검사가 "억제"됩니다. As you can see in this demo의 경우 취소 버튼은 유효성 검사를 건너 뛰는 것을 제외하고는 다른 제출 버튼과 똑같이 작동합니다. 취소 버튼을 클릭했을 때보고 싶은 것을 정확하게 설명하십시오.

그렇지 않으면

, 어쩌면 이것은 당신이 원하는 : http://jsfiddle.net/25XBT/

jQuery를 :

$(document).ready(function() { 

    var validate = $('#myform').validate({ 
     // your rules & options 
    }); 

    $('#cancel').on('click', function (e) { 
     e.preventDefault(); 
     validate.resetForm(); 
     $('form').get(0).reset(); 
    }); 

}); 

HTML :

<form id="myform"> 
    <input type="text" name="myfield" /> 
    <input type="submit" /> 
    <input type="submit" id="cancel" class="cancel" value="cancel" /> 
</form> 

참조 : http://docs.jquery.com/Plugins/Validation/Validator/resetForm

편집 : class="cancel" 이후로는 formnovalidate 속성이 사용됩니다.

<input type="submit" id="cancel" formnovalidate="formnovalidate" value="cancel" /> 
+0

필자의 필자와 필자 샘플 사이에 중요한 차이점이 하나 있습니다. 클릭 핸들러에'e.preventDefault()'를 포함 시켰습니다. 그러나 샘플을 실행하면 첫 번째 클릭에서 클릭 핸들러에 도달하지 못합니다.그래서 다른 차이점을 찾았고 코드와 키의 주요 차이점은 피 드백의 제출 및 취소 버튼 사이에 삽입 한 ** 하드 브레이크입니다. (어떤 이유에서든 대답). 내 코드에 단단한 부분을 포함 시키면 작동합니다! 나가면 다시 부러집니다. 나는 그것이 왜 중요한지 상상할 수 없다. – schufty

+0

하드 브레이크가 제거되었을 때 어떤 일이 일어나는지 보여주기 위해 바이올린을 업데이트했습니다. 업데이트 된 바이올린은 http://jsfiddle.net/47XV9/입니다. 당신은 내가 원래의 질문에 묘사 한 것과 정확히 일치하는 행동을 취한다. – schufty

+0

@schufty, 나는이 답변의 '
'을 남겨 두었습니다. 왜냐하면이 JavaScript의 기능과는 전혀 관련이 없기 때문입니다. 또한, 나는 나의 대답에 링크 된 jsFiddle이 내가 링크하려고했던 올바른 jsFiddle이 아니라는 것을 알아 차린다. 나는 지금 나의 연결을 고쳤다. – Sparky

관련 문제