HTML5 양식 유효성 검사 트리거
여러 필드 세트가있는 양식이 있습니다. 필드 세트를 한 번에 하나씩 사용자에게 표시하는 Javascript가 있습니다. HTML5 유효성 검사를 지원하는 브라우저의 경우이를 활용하고 싶습니다. 하지만 내 방식대로해야합니다. JQuery를 사용하고 있습니다.
사용자가 JS 링크를 클릭하여 다음 필드 세트로 이동하면 현재 필드 세트에서 유효성 검사가 발생하고 문제가있는 경우 사용자가 앞으로 이동하지 못하도록 차단해야합니다.
이상적으로는 사용자가 요소에 대한 초점을 잃으면 유효성 검사가 발생합니다.
현재 novalidate가 Javascript를 사용하고 있습니다. 기본 방법을 사용하고 싶습니다. :)
기본 유효성 검사 UI를 트리거 할 수는 없지만 임의의 입력 요소에서 유효성 검사 API를 쉽게 활용할 수 있습니다.
$('input').blur(function(event) {
event.target.checkValidity();
}).bind('invalid', function(event) {
setTimeout(function() { $(event.target).focus();}, 50);
});
첫 번째 이벤트 checkValidity
는 포커스를 잃는 즉시 모든 입력 요소에서 발생합니다. 요소가 있으면 invalid
해당 이벤트가 발생하고 두 번째 이벤트 핸들러에 의해 트랩됩니다. 이것은 요소에 초점을 다시 설정하지만 매우 성 가실 수 있습니다. 오류에 대해 알리는 데 더 나은 솔루션이 있다고 가정합니다. 위의 내 코드의 작동 예가 있습니다.
TL; DR : 오래된 브라우저는 신경 쓰지 않습니까? 사용 form.reportValidity()
.
레거시 브라우저 지원이 필요하십니까? 읽어.
그것은 사실 입니다 수동으로 트리거 유효성 검사 가능.
재사용 가능성을 높이기 위해 내 대답에 일반 JavaScript를 사용하겠습니다. jQuery는 필요하지 않습니다.
다음 HTML 양식을 가정하십시오.
<form>
<input required>
<button type="button">Trigger validation</button>
</form>
그리고 JavaScript에서 UI 요소를 가져 오겠습니다.
var form = document.querySelector('form')
var triggerButton = document.querySelector('button')
Internet Explorer와 같은 레거시 브라우저에 대한 지원이 필요하지 않습니까? 이건 널위한거야.
모든 최신 브라우저 는 요소에 대한 방법을 지원 합니다 .reportValidity()
form
triggerButton.onclick = function () {
form.reportValidity()
}
그게 다입니다. 또한 이 접근 방식을 사용 하는 간단한 CodePen 이 있습니다.
구형 브라우저에 대한 접근 방식
다음은
reportValidity()
이전 브라우저에서 어떻게 에뮬레이션 할 수 있는지에 대한 자세한 설명 입니다.그러나 이러한 코드 블록을 프로젝트에 직접 복사하여 붙여 넣을 필요는 없습니다 . 쉽게 사용할 수 있는 포니 필 / 폴리 필 이 있습니다.
reportValidity()
지원되지 않는 곳 에서는 브라우저를 약간 속일 필요가 있습니다. 그래서 우리는 무엇을할까요?
- 를 호출하여 양식의 유효성을 확인하십시오
form.checkValidity()
. 양식이 유효한지 여부는 알려주지 만 유효성 검사 UI는 표시되지 않습니다. - 양식이 유효하지 않은 경우 임시 제출 버튼을 만들고 클릭을 트리거합니다. 형식이 유효하지 않기 때문에, 우리는 알고 그것을하지 않습니다 실제로는 하지만, 사용자에게 검증 힌트를 표시합니다, 제출합니다. 임시 제출 버튼은 즉시 제거되므로 사용자에게 표시되지 않습니다.
- 양식이 유효하면 우리는 전혀 방해 할 필요가 없으며 사용자가 계속 진행하도록합니다.
코드에서 :
triggerButton.onclick = function () {
// Form is invalid!
if (!form.checkValidity()) {
// Create the temporary button, click and remove it
var tmpSubmit = document.createElement('button')
form.appendChild(tmpSubmit)
tmpSubmit.click()
form.removeChild(tmpSubmit)
} else {
// Form is valid, let the user proceed or do whatever we need to
}
}
이 코드는 거의 모든 일반적인 브라우저에서 작동합니다 (IE11까지 성공적으로 테스트했습니다).
어느 정도는 trigger
HTML5 양식 유효성 검사를 할 수 있고 양식을 제출하지 않고도 사용자에게 힌트를 표시 할 수 있습니다!
두 개의 버튼, 하나는 검증 용, 하나는 제출 용
세트 onclick
글로벌 플래그 (예를 들어를 설정하는 유효성 검사 버튼에 리스너를 justValidate
이 클릭을 표시하기 위해이) 양식의 유효성을 확인하기위한 것입니다.
그리고 설정 onclick
(가) 설정된 버튼 제출에 리스너를 justValidate
false로 플래그를.
그런 다음 onsubmit
양식 의 처리기에서 플래그 justValidate
를 확인 하여 반환 값을 결정하고를 호출하여 preventDefault()
제출할 양식을 중지합니다. 아시다시피 HTML5 양식 유효성 검사 (및 사용자에 대한 GUI 힌트)는 onsubmit
이벤트 전에 수행 되며 양식이 유효하더라도 false를 반환하거나 invoke를 반환하여 양식 제출을 중지 할 수 있습니다 preventDefault()
.
그리고 HTML5에는 양식의 유효성을 확인하는 방법이 있습니다. form.checkValidity()
, 그러면 양식이 코드에서 유효성이 검사되는지 여부를 알 수 있습니다.
좋아요, 여기 데모가 있습니다 : http://jsbin.com/buvuku/2/edit
필드 세트에 HTML5 유효성 검사를 추가하거나 제거하기가 다소 쉽습니다.
$('form').each(function(){
// CLEAR OUT ALL THE HTML5 REQUIRED ATTRS
$(this).find('.required').attr('required', false);
// ADD THEM BACK TO THE CURRENT FIELDSET
// I'M JUST USING A CLASS TO IDENTIFY REQUIRED FIELDS
$(this).find('fieldset.current .required').attr('required', true);
$(this).submit(function(){
var current = $(this).find('fieldset.current')
var next = $(current).next()
// MOVE THE CURRENT MARKER
$(current).removeClass('current');
$(next).addClass('current');
// ADD THE REQUIRED TAGS TO THE NEXT PART
// NO NEED TO REMOVE THE OLD ONES
// SINCE THEY SHOULD BE FILLED OUT CORRECTLY
$(next).find('.required').attr('required', true);
});
});
A List Apart에 게시 된이 기사가이 기사를 잘 설명하고 있기 때문에 처음부터이 모든 것을 입력 할 가치가 있는지 모르겠습니다 . MDN에는 HTML5 양식 및 유효성 검사 (API 및 관련 CSS 포함)에 대한 편리한 가이드 도 있습니다.
Html 코드 :
<form class="validateDontSubmit">
....
<button style="dislay:none">submit</button>
</form>
<button class="outside"></button>
javascript (Jquery 사용) :
<script type="text/javascript">
$(document).on('submit','.validateDontSubmit',function (e) {
//prevent the form from doing a submit
e.preventDefault();
return false;
})
$(document).ready(function(){
// using button outside trigger click
$('.outside').click(function() {
$('.validateDontSubmit button').trigger('click');
});
});
</script>
이것이 당신을 도울 수 있기를 바랍니다
트릭을 찾은 것 같습니다. 양식 target
속성을 제거한 다음 제출 버튼을 사용하여 양식을 확인하고 힌트를 표시하고 JavaScript를 통해 양식이 유효한지 확인한 다음 무엇이든 게시하십시오. 다음 코드가 저에게 효과적입니다.
<form>
<input name="foo" required>
<button id="submit">Submit</button>
</form>
<script>
$('#submit').click( function(e){
var isValid = true;
$('form input').map(function() {
isValid &= this.validity['valid'] ;
}) ;
if (isValid) {
console.log('valid!');
// post something..
} else
console.log('not valid!');
});
</script>
var field = $("#field")
field.keyup(function(ev){
if(field[0].value.length < 10) {
field[0].setCustomValidity("characters less than 10")
}else if (field[0].value.length === 10) {
field[0].setCustomValidity("characters equal to 10")
}else if (field[0].value.length > 10 && field[0].value.length < 20) {
field[0].setCustomValidity("characters greater than 10 and less than 20")
}else if(field[0].validity.typeMismatch) {
field[0].setCustomValidity("wrong email message")
}else {
field[0].setCustomValidity("") // no more errors
}
field[0].reportValidity()
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="email" id="field">
매우 복잡한 (특히 비동기) 유효성 검사 프로세스가있는 경우 간단한 해결 방법이 있습니다.
<form id="form1">
<input type="button" onclick="javascript:submitIfVeryComplexValidationIsOk()" />
<input type="submit" id="form1_submit_hidden" style="display:none" />
</form>
...
<script>
function submitIfVeryComplexValidationIsOk() {
var form1 = document.forms['form1']
if (!form1.checkValidity()) {
$("#form1_submit_hidden").click()
return
}
if (checkForVeryComplexValidation() === 'Ok') {
form1.submit()
} else {
alert('form is invalid')
}
}
</script>
Another way to resolve this problem:
$('input').oninvalid(function (event, errorMessage) {
event.target.focus();
});
참고URL : https://stackoverflow.com/questions/7548612/triggering-html5-form-validation
'developer tip' 카테고리의 다른 글
왜 1x1 픽셀 GIF (웹 버그) 데이터를 제공합니까? (0) | 2020.10.21 |
---|---|
OpenGL에서 "즉시 모드"는 무엇을 의미합니까? (0) | 2020.10.21 |
MongoDB GUI 클라이언트 (크로스 플랫폼 또는 Linux) (0) | 2020.10.21 |
일반 날짜를 유닉스 타임 스탬프로 변환 (0) | 2020.10.20 |
항목에서 슬라이드 슬라이드를 부트 스트랩하는 속도를 어떻게 제어 할 수 있습니까? (0) | 2020.10.20 |