HTML5 양식 요소의 유효성 검사 비활성화


418

양식에서 새 HTML5 양식 유형 <input type="url" />( 예 : 유형에 대한 자세한 정보) 을 사용하고 싶습니다 .

문제는 Chrome이 매우 도움이되고 짜증나는 것을 제외 하고는이 요소를 검증하고 싶다는 것입니다. 기본 제공 유효성 검사에 실패하면 요소에 초점을 맞추는 것 외에 다른 메시지 나 표시가 없습니다. URL 요소를으로 미리 채우 "http://"므로 내 맞춤 확인은 해당 값을 빈 문자열로 취급하지만 Chrome에서는이를 거부합니다. 유효성 검사 규칙을 변경할 수 있으면 작동합니다.

다시 사용으로 되돌릴 수는 type="text"있지만 이러한 새로운 유형의 제안을 사용하여 개선 된 기능을 원합니다 (예 : 모바일 장치에서 사용자 정의 키보드 레이아웃으로 자동 전환).

그래서, 자동 검증을 해제하거나 사용자 정의하는 방법은 무엇입니까?


8
HTML 5.1 초안 스펙은 inputmode속성을 언급 하는데, 내가 올바르게 읽은 것을 이해하고 있다면 사용자가 필드와 상호 작용할 때 어떤 키보드 유형이 필드와 상호 작용할 때 어떤 유효성 검사 규칙을 암시 하지 않으면 서 어떤 키보드 유형을 제공해야하는지 지정할 수 있습니다 . 나중에 언젠가는 inputmode속성 대신 속성을 사용하는 것이이 type문제에 대한 올바른 해결책 일 것입니다.
Mark Amery

@MarkAmery 지금 미래를 얻는 것이 그리 어렵지는 않지만 :$('[inputmode]').each(function () { this.attr({type: this.attr('inputmode'), novalidate: true}) });
Marnen Laibow-Koser

1
@ MarnenLaibow-Koser 당신이 원하는 것은 유효성 검사를 끄는 것만으로도 효과가 있지만 (질문과 대답으로 지정), 결과와 동일한 결과를 얻지는 못합니다 inputmode. 사용자가 원하는 방식으로 입력 상자에 입력하는 숫자가 아닌 값을 읽을 수 없습니다 (예 :) number. 예를 들어, 이 바이올린 의 텍스트 상자에 숫자가 아닌 것을 입력 하고 버튼을 클릭하십시오.
Mark Amery

@MarkAmery 흥미로운. <input type='number'>숫자가 아닌 값을 전혀 허용하지 않기 때문 입니까?
Marnen Laibow-Koser

@ MarnenLaibow-Koser 나는 그렇게 생각한다. 에 허용 대답 이 질문 문제에 대해는 응답자 주장 위임이이 동작을 스펙에 대한 링크가 포함되어 있습니다.
Mark Amery

답변:


752

HTML5에서 양식에 대한 클라이언트 측 유효성 검증을 사용하지 않으려면 양식 요소에 novalidate 속성을 추가하십시오. 전의:

<form method="post" action="/foo" novalidate>...</form>

https://www.w3.org/TR/html5/sec-forms.html#element-attrdef-form-novalidate를 참조 하십시오.


83
novalidate="novalidate"novalidate=""도 유효한 구문입니다.
bassim

9
@bassim 유효한 구문이지만 지나치게 장황한 이유는 무엇보다 입력해야합니까?
user1569050

11
@ user1569050 예를 들어 CakePHP와 같은 프레임 워크 에서는의 배열 에서 novalidate="novalidate"를 설정할 때이 방법 을 사용 합니다 . 추가 정보를위한 감사합니다 bassim :)novalidate => true$optionsFormHelper::create()
Jelmer

12
@ rybo111 이것은 클라이언트 측 유효성 검사로 서버에 대한 요청 수를 줄이는 데 좋습니다. 서버 측에서 검증을 용이하게 할 이유는 없습니다.
martti

11
@martti 필자는 새로운 PHP 유효성 검사를 테스트하는 경우 전체 양식을 올바르게 작성하지 않아도 해당 양식에 대한 JavaScript 유효성 검사를 신속하게 비활성화 할 수 있다는 사실을 언급하고있었습니다. 나는 "테스트하기 더 쉬워졌다"고 썼어야했다.
rybo111

31

사양을 읽었으며 Chrome에서 일부 테스트를 수행했으며 "잘못된"이벤트를 잡아서 양식 제출을 허용하는 것처럼 보이는 false를 반환하는 경우.

이 HTML과 함께 jquery를 사용하고 있습니다.

// suppress "invalid" events on URL inputs
$('input[type="url"]').bind('invalid', function() {
  alert('invalid');
  return false;
});

document.forms[0].onsubmit = function () {
  alert('form submitted');
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
  <input type="url" value="http://" />
  <button type="submit">Submit</button>
</form>

다른 브라우저에서는 이것을 테스트하지 않았습니다.


훌륭합니다-내일 사용해보고 어떻게 진행되는지 알려 드리겠습니다. 감사.
nickf

와! 제출 이벤트가 진행된 곳을 찾는 데 어려움을 겪고있었습니다. 감사합니다!
집시 왕

2
FireFox는 입력 변경시 유효성을 검사합니다. 그런 다음 '유효하지 않은'이벤트가 발생하지 않습니다. 그래서 나에게 해결책이 없습니다.
Niels Steenbeek

7
내일은 오지 않는다 :)
Lucky Soni

4
작동하지 않습니다. 코드를 스 니펫으로 만들었습니다. 포획 invalid이벤트를하고 양식을 제출하지 않는 거짓을 반환.
Dan Dascalescu

23

양식에 novalidate 속성을 사용하면 브라우저가 양식을 보내지 못하게됩니다. 브라우저는 여전히 데이터를 평가하고 : valid 및 : invalid 의사 클래스를 추가합니다.

유효하고 잘못된 의사 클래스가 내가 사용하고있는 HTML5 상용구 스타일 시트의 일부이기 때문에 이것을 알았습니다. 방금 의사 클래스와 관련된 CSS 파일의 항목을 제거했습니다. 누군가 다른 해결책을 찾으면 알려주십시오.


출품작은 무엇입니까?
tm_forthefuture

1
하하-더 이상 죄송합니다. 이것은 3 년 전입니다. :(
BFTrick

1
당신은 의미한다 : <form action="" method="" class="" id="" novalidate>;)
Muhammad Shahzad

15

가장 좋은 해결책은 텍스트 입력을 사용하고 inputmode = "url"속성을 추가하여 URL 키보드 기능을 제공하는 것입니다. HTML5 사양은 이러한 목적으로 생각되었습니다. type = "url"을 유지하면 모든 경우에 유용하지 않은 구문 유효성 검사를 얻습니다 (구체적으로 허용되며 큰 도움이되지 않는 구문 대신 404 오류를 반환하는지 확인하는 것이 좋습니다).

예를 들어 pattern = "https? : //.+"속성을 사용하여 기본 패턴을 재정의 할 수도 있습니다.

novalidate 속성을 양식에 넣는 것은 양식의 모든 필드에 대한 유효성 검증을 제거하고 예를 들어 이메일 필드에 대한 유효성 검증을 유지할 수 있기 때문에 질문에 대한 정답이 아닙니다.

jQuery를 사용하여 유효성 검사를 비활성화하는 것도 JavaScript없이 작동해야하므로 나쁜 해결책입니다.

필자의 경우 웹 사이트가 필요하고 ftp : // 등이 필요 없기 때문에 URL 입력 앞에 2 개의 옵션 (http : // 또는 https : //)이있는 select 요소를 넣었습니다. 이렇게하면이 이상한 접두사 (Tim Berners-Lee의 가장 큰 후회 및 URL 구문 오류의 주요 원인)를 입력하지 않고 자리 표시 자 (HTTP없이)와 함께 inputmode = "url"을 사용하여 간단한 텍스트 입력을 사용합니다. jQuery와 서버 측 스크립트를 사용하여 웹 사이트의 실제 존재를 확인하고 (404 없음) 삽입 된 경우 HTTP 접두사를 제거합니다 (pattern = "^ ((? http).) * $"와 같은 패턴은 사용하지 않습니다. 더 관용적 인 것이 낫다고 생각하기 때문에 접두사를 넣지 않도록하십시오.)


13

브라우저의 유효성 검사를 끝내는 대신 http://자리 표시 자 텍스트로 넣을 수 있습니다. 이것은 당신이 연결 한 바로 그 페이지에서 온 것입니다.

자리 표시 자 텍스트

HTML5가 웹 양식에 제공하는 첫 번째 개선 사항은 입력 필드에 자리 표시 자 텍스트 를 설정하는 기능 입니다 . 필드가 비어 있고 초점이 맞지 않으면 입력 필드 안에 자리 표시 자 텍스트가 표시됩니다. 입력 필드를 클릭 (또는 탭)하면 자리 표시 자 텍스트가 사라집니다.

아마 자리 표시 자 텍스트를 본 적이있을 것입니다. 예를 들어, Mozilla Firefox 3.5는 위치 표시 줄에“책갈피 및 기록 검색”이라는 자리 표시 자 텍스트를 포함합니다.

여기에 이미지 설명을 입력하십시오

위치 표시 줄을 클릭 (또는 탭)하면 자리 표시 자 텍스트가 사라집니다.

여기에 이미지 설명을 입력하십시오

아이러니하게도 Firefox 3.5는 웹 양식에 자리 표시 자 텍스트 추가를 지원하지 않습니다. C'est la vie.

자리 표시 자 지원

IE  FIREFOX SAFARI  CHROME  OPERA   IPHONE  ANDROID
·   3.7+    4.0+    4.0+    ·       ·       ·

고유 한 웹 양식에 자리 표시 자 텍스트를 포함시키는 방법은 다음과 같습니다.

<form>
  <input name="q" placeholder="Search Bookmarks and History">
  <input type="submit" value="Search">
</form>

placeholder속성을 지원하지 않는 브라우저 는 단순히 속성을 무시합니다. 해가없고 파울도 없습니다. 브라우저가 플레이스 홀더 텍스트를 지원하는지 확인하십시오 .

사용자에게 "시작점"을 제공하지 않기 때문에 정확히 동일하지는 않지만 적어도 절반 정도입니다.


5
팁은 +1이지만 불행히도 나에게 해결책이되지는 않습니다. 나는 여전히 UX가 너무 열악하기 때문에 유효성 검사를 원하지 않습니다.
nickf

10

매우 유용한 기본 확인 양식을 우회하지 않고 다음 선택기에서 CSS가있는 Chrome 솔루션을 찾았습니다.

form input::-webkit-validation-bubble-message, 
form select::-webkit-validation-bubble-message,
form textarea::-webkit-validation-bubble-message {
    display:none;
} 

이런 식으로 메시지를 사용자 정의 할 수도 있습니다.

이 페이지에서 해결책을 얻었습니다 : http://trac.webkit.org/wiki/Styling%20Form%20Controls


1
이것은 크롬 (29)의 최신 버전에서는 작동하지 않습니다. 깜박임으로 인해 궁금합니다.
Blowsie

5

당신의 형태로 novalidate 를 사용 하십시오.

<form name="myForm" role="form" novalidate class="form-horizontal" ng-hide="formMain">

건배!!!


1
단일 입력 태그에 대한 유효성 검사를 비활성화하는 방법은 무엇입니까?
Tobias Kolb 2016 년

0

다음은 novalidate를 사용할 때조차 크롬과 오페라가 잘못된 입력 대화 상자를 표시하지 못하게하는 데 사용하는 기능입니다.

window.submittingForm = false;
$('input[novalidate]').bind('invalid', function(e) {
    if(!window.submittingForm){
        window.submittingForm = true;
        $(e.target.form).submit();
        setTimeout(function(){window.submittingForm = false;}, 100);
    }
    e.preventDefault();
    return false;
});

0

그 불쾌한 유효성 검사 거품을 억제하고 자신의 유효성 검사기를 추가하기 위해 자바 스크립트를 추가 할 수 있습니다.

document.addEventListener('invalid', (function(){
    return function(e) {
      //prevent the browser from showing default error bubble / hint
      e.preventDefault();
      // optionally fire off some custom validation handler
      // myValidation();
    };
})(), true);


-5

간단한 크롬 확장 프로그램을 설치하고 즉시 https://chrome.google.com/webstore/detail/html5-form-validation-err/dcpagcgkpeflhhampddilklcnjdjlmlb/ 관련 유효성 검사를 비활성화 할 수 있습니다

기본적으로 모든 것이 기본적으로 작동하지만 툴바의 확장 아이콘을 한 번 클릭하여 html5 유효성 검사를 비활성화 할 수 있습니다


많은 사람들이이 솔루션을 싫어하는 이유를 잘 모르면 실제 HTML 코드를 사용하지 않고 HTML5 양식에 대한 서버 유효성 검사를 테스트 할 수 있습니다.
Andrew Zhilin

3
나는 질문이 주위에 초점을 맞추고 있기 때문에이 싫어 믿습니다 구축 HTML5 버전 양식을 모든 사용자에 대해 자동 확인 소등. 모든 사용자에게 A) 크롬을 사용하도록 요청하고 B) 사이트를 사용하기 전에 확장 프로그램을 설치하도록 요청하는 것은 유용한 해결책이 아닙니다.
Kallmanation
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.