자바 스크립트에서 유효하지 않은 필드를 표시 할 수 있습니까?


96

이 게시물을 읽은 HTML5에 도입 된 '유효'및 '유효하지 않은'입력 값에 대한 의사 클래스가 있음을 발견했습니다.

자바 스크립트에서 입력 필드를 유효하지 않거나 유효한 것으로 표시 할 수있는 방법이 있습니까? 또는 사용 된 유효성 검사 방법을 재정의 할 수 있습니까?


"유효하지 않은"클래스로 항상 더블 업할 수 있지만 더 나은 방법이 있다는 것을 배우면 정말 흥미로울 것입니다.
Pointy

1
예, 물론 지루할 것입니다.)
Svish

1
Svish, 아래 답변을 다시 평가할 수 있습니까? dajavax가 원하는 것을 정확히 수행하는 답변을 제공 한 것 같습니다. dajavax의 답변을 수락 한 것으로 표시하면 다른 방문자에게 도움이 될 수 있습니다.
Kodos Johnson

확실히 @KodosJohnson, 🙂까지 머리에 대한 감사
Svish

답변:


163

이를 위해 customValidity 함수를 사용할 수 있습니다.

customValidity 메시지를 필드에 추가하면 무효화됩니다. 메시지를 빈 문자열로 설정하면 다시 유효 해집니다 (다른 이유로 인해 유효하지 않은 경우 제외).

field.setCustomValidity("Invalid field."); 필드가 유효하지 않게됩니다.

field.setCustomValidity(""); HTML5 제약 조건에 실패하지 않는 한 필드를 유효하게 만듭니다.



4
또한 브라우저의 유효성 메시지가 표시되기를 원 input하거나 바로 field.reportValidity ()를blur 사용할 수 있습니다 .
Sam Carlton

4

편집 : 누군가 DOM에 대한 "유효한" "잘못된"속성을 찾고 있다고 설명했습니다.

을 사용하여 각 태그에 속성을 추가합니다 dom_object.setAttribute("isvalid", "true"). 매번 이러한 속성을 업데이트하고 매번 사용하는 중앙 유효성 검사 기능을 가질 수도 있습니다 dom_object.getAttribute("isvalid").

요소가 포커스를 잃을 때마다 또는 원할 때마다이 함수를 실행할 수 있습니다.

정확히는 우아하지는 않지만 안타깝게도 현재 자바 스크립트와 HTML5에 "의사"지원이 없습니다.


질문을 이해하면 Javascript로 유효성 검사를 수행 할 수 있습니다. 그러나 클라이언트 측 유효성 검사, 특히 javascript 유효성 검사를 피하는 것은 매우 쉽습니다 . 클라이언트 데이터를 신뢰해서는 안되며 항상 서버 측에서 확인해야합니다.

예를 들어 소스 코드를 검사하여 요소 ID를 쉽게 찾은 다음 document.getElementById('some_id').setAttribute('max', new_number)최대 값을 변경할 수 있습니다 (링크의 항목 중 하나임).

다양한 방법이 있으니 일반적인 관용구를 알려 드리겠습니다.

수행하여 값을 얻을 수 있습니다 document.getElementById('form_element_id').value( name서버로 전송되는 양식 a 와 idjavascript에서 사용 하는 양식을 제공해야 함 ). 텍스트 영역의 경우 .innerHTML.

그런 다음 변수에 값이 있으며이를 확인하는 다양한 방법이 있습니다.

예를 들어 if (parseInt(my_value) < 0) //error. 정규식을 사용할 수도 있지만 모두 설명하지는 않겠지 만 여기에서 시작할 수 있습니다 . http://www.w3schools.com/jsref/jsref_obj_regexp.asp . 나는 w3schools가 최고의 소스가 아니라는 것을 알고 있지만 시작하기에 괜찮은 곳이라고 생각합니다.

이제 유효성 검사 부분에 대해 : onsubmit="return validateForm()validateForm ()이 모든 검사를 수행하는 함수 인 양식 태그에 추가 하십시오. 그리고 함수는 true유효하고 false그렇지 않으면 반환 합니다 . 이것은 기본 유효성 검사 기능을 재정의합니다 (기본적으로 아무것도 수행하지 않음).

위의 예에서 그래서, //error로 대체 될 것이다 return false. 다른 일도 할 수 있습니다. 예를 들어 오류를 경고하고 false를 반환합니다. 또한 javascript를 사용하여 유효하지 않은 필드를 강조 표시 할 수 있습니다 ( " 입력 필드를 javascript에서 유효하지 않음 / 유효한 것으로 표시 "를 의미하는지 확실하지 않음 )

물론 모든 필드를 확인하지 않으려면 특정 필드가 통과 할 때만 true를 반환하면됩니다. 다시 말하지만, 이것에 의존해서는 안되지만, 평균적인 사람들 만 억제한다면 쉬운 해결책입니다.


9
당신은 완전히 맞지만 질문을 완전히 이해하지 못했다고 생각합니다. HTML5에는 기본 제공 유효성 검사 규칙을 암시하는 속성 값을 HTML 마크 업에 추가하는 다양한 방법이 있습니다. 브라우저가 이러한 규칙을 적용 할 때 입력 필드는 CSS의 ": valid"또는 ": invalid"유사 클래스와 일치합니다. 따라서 이러한 속성으로 HTML을 작성하고 규칙이있는 ": valid"및 ": invalid"선택자를 사용하여 CSS를 작성하고 JavaScript없이 시각적 피드백을 제공 할 수 있습니다. 문제는 기본적으로 ": valid"상태가 DOM 속성으로 사용 가능한지 여부입니다.
Pointy

-17

자바 스크립트에서 입력 필드를 유효하지 않거나 유효한 것으로 표시 할 수있는 방법이 있습니까?

불행히도 JavaScript에서는 가상 클래스의 스타일을 지정할 수 없습니다. 실제 요소가 아니기 때문에 실제 DOM에 존재하지 않기 때문입니다.

바닐라 JavaScript를 사용하면 유효성 검사 API를 사용합니다 .

jQuery에서는 간단하게 http://jsfiddle.net/elclanrs/Kak6S/ 할 수 있습니다.

if ( $input.is(':invalid') ) { ... }

또는 사용 된 유효성 검사 방법을 재정의 할 수 있습니까?

HTML5 유효성 검사를 사용하는 경우 마크 업을 고수하십시오. 그렇지 않으면 HTML5 유효성 검사를 비활성화 $form.attr('novalidate', 'novalidate')하고 JS를 사용하여 필드 유효성을 검사 한 다음 필요한 곳에 valid또는 invalid클래스 를 추가 할 수 있습니다. HTML5가 아닌 브라우저를 지원하기 위해 이와 같이 작동 하는 플러그인 을 만들었습니다 .


스타일링 할 수 없다는 게 무슨 뜻이야? 벌써하고 있어요. input:invalid + label::after{content: " INVALID";color: red;}필드가 유효하지 않은 경우 (예 : 이메일 필드에 유효하지 않은 이메일이있는 경우) 입력 필드 옆에있는 레이블 뒤에 INVALID 텍스트의 빨간색 부분을 추가합니다
Svish

11
"JavaScript에서 입력 필드를 유효하지 않거나 유효 함으로 표시 할 수있는 방법이 있습니까?" "안타깝게도 JavaScript에서 의사 클래스의 스타일을 지정할 수 없습니다."질문이 던진 내용이 아닙니다.
mikemaccana

당신은 ... 동적하지만 의사 클래스로 새로운 클래스를 정의 할 CSSOM을 사용할 수 있어야합니다
브렛 Zamir
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.