양식을 제출하지 않는 HTML 버튼


370

양식이 있습니다. 그 양식 외에는 버튼이 있습니다. 다음과 같은 간단한 버튼 :

<button>My Button</button>

그럼에도 불구하고 클릭하면 양식이 제출됩니다. 코드는 다음과 같습니다.

<form id="myform">
    <input />
</form>
<button>My Button</button>

이 버튼은 JavaScript 만 있으면됩니다. 그러나 위 코드 에서처럼 보일지라도 양식을 제출합니다. 태그 버튼을 스팬으로 변경하면 완벽하게 작동합니다. 그러나 불행히도 버튼이어야합니다. 해당 버튼이 양식을 제출하지 못하도록 차단할 수있는 방법이 있습니까? 예를 들어

<button onclick="document.getElementById('myform').doNotSubmit();">My Button</button>

3
이 문제는 최신 브라우저에서 재현 할 수 없으며 문제는 원래 오해로 인한 것일 수 있습니다. 의 기본 동안 buttonIS type=submit의 경우 제출해야 할 양식이없는 button요소가 외부의 어떤 형태이다. 실제 데모 (샘플 문서, 브라우저 식별 및 일부 양식이 제출되었음을 나타내는 관찰 설명)가 제공되지 않는 한이 질문은 재현 할 수없는 것으로 종료해야합니다. 사용하는 type=button것이 좋은 습관이지만 이것이 실제 문제가되지는 않습니다.
Jukka K. Korpela

답변:


894

나는 이것이 HTML의 가장 성가신 작은 특성이라고 생각합니다 ... 제출하지 않으려면 그 버튼은 "button"유형이어야합니다.

<button type="button">My Button</button>

: 5 2 월 2019 업데이트 당으로 HTML 생활 표준 (또한 HTML 5 사양 ) :

측값 기본값유효하지 않은 값 기본값 은 제출 단추 상태입니다.


9
@Powerslave 어떤 이유도하지to use <button>
Sandip Pingle

4
@SandipPingle 정말 복잡한 스타일링이 필요하지 않으면 사용할 이유가 없습니다. 또한 IE6 및 IE7 (다행히 단계적으로 중단됨)이 <button>경우에 따라 잘못 처리 됩니다. 또한 <button>브라우저마다 <button>양식에 사용될 때 서로 다른 브라우저가 서로 다른 값을 제출할 수 있다는 점에서 브라우저 간 호환이 100 %가 아닙니다 .
Powerslave

35
이것은 훌륭한 답변이지만 특이 하지는 않습니다 . 태그 에서 type속성 의 기본값 <button>submit입니다. 로 변경하는 경우 type=button는이 <button>디폴트의 동작을 제공하지 않습니다. 참조 type여기에 속성을 : developer.mozilla.org/en-US/docs/Web/HTML/Element/button
마이클 벤자민

1
그래서 그 아이디어는 <button type='submit'>저에게 너무 어렵습니다. 어쨌든 당신의 대답은 훌륭합니다!
divHelper11

2
비 양식 특정 요소의 기본 (따라서 암시적인) 동작은 잠재적으로 파괴적인 양식 특정 기능을 트리거하는 것입니다. HTML 스펙에 대한 독특한 디자인 결정 은 어떻게되지 않습니까?
HonoredMule

36

return false;onclick 핸들러 끝에서 작업을 수행합니다. 그러나 JavaScript를 추가하지 않아도 올바르게 작동하는 방식으로 추가 type="button"하는 것이 좋습니다 <button>.


1
양식을 제출하지 않은 버튼은 JavaScript가 활성화 된 경우에만 유용합니다 ... type = "button"이 더 깨끗하다는 데 동의합니다.
ThiefMaster

2
return false;모든 시나리오에서 작동하지는 않습니다 type="Button". JavaScript가 활성화 된 경우에도 마찬가지입니다.
brejoc

15

Dave Markle이 맞습니다. 에서 W3School의 웹 사이트 :

항상 버튼의 유형 속성을 지정하십시오. Internet Explorer의 기본 유형은 "버튼"이며 다른 브라우저 (및 W3C 사양)에서는 "제출"입니다.

즉, 사용중인 브라우저가 W3C의 사양을 따릅니다.


15

기본적으로 html 버튼은 양식을 제출합니다.

이는 양식 외부에있는 단추조차도 제출자 역할을하기 때문입니다 (W3Schools 웹 사이트 : http://www.w3schools.com/tags/att_button_form.asp 참조 ).

즉, 버튼 유형은 기본적으로 "제출"입니다

<button type="submit">Button Text</button>

따라서이 문제를 해결하는 쉬운 방법은 버튼 유형 을 사용하는 것 입니다.

<button type="button">Button Text</button>

다른 옵션으로는 버튼을 클릭했을 때 또는 <input> 태그를 대신 사용하는 onclick 또는 다른 핸들러 의 끝에 false 반환

자세한 내용을 보려면 단추에서 Mozilla Developer Network의 정보를 확인하십시오. https://developer.mozilla.org/en/docs/Web/HTML/Element/button


3

<Button>태그 를 사용하지 않는 것이 좋습니다 . <Input type='Button' onclick='return false;'>대신 태그를 사용하십시오 . ( "false return"을 사용하면 실제로 양식을 보내지 않아야합니다.)

일부 참고 자료


2
사용하기에 충분하고 사용하기 <input type="button" />에 충분 return false;합니다. 두 가지를 모두 수행 할 필요는 없습니다.
Tom

버튼 태그를 사용하지 않는 것이 좋습니다. 사용하지 않으면 버튼 태그와 함께 제공되는 일부 접근성 기능이 손실됩니다. 버튼 역할을하는 요소에는 실제로 버튼 태그가 권장된다고 말하고 싶습니다.
CookieMonster 2018 년

참조 자료의 참고 사항에 따르면 "버튼 유형의 <input> 요소가 여전히 완전한 HTML이지만 새로운 <button> 요소는 이제 버튼을 만드는 데 선호되는 방법입니다." 그래서 당신이 말한 것과 정확히 반대입니다.
jedzej 2016 년

1

접근성의 이유로 여러 type=submit버튼으로 끌어낼 수 없었습니다 . 유일한 A를 기본적으로 작업에 방법 form여러 버튼 만 부딪 치기 형태로 제출할 수있는 하나의 Enter열쇠는 그들 만 하나입니다 보장하는 type=submit다른 사람들이 같은 다른 유형에있는 동안 type=button. 이러한 방식으로 키보드 지원 측면에서 브라우저에서 양식을 처리 할 때 더 나은 사용자 경험을 활용할 수 있습니다.


0

나를 위해 일한 또 다른 옵션은 onsubmit = "return false;"를 추가하는 것이 었습니다. 양식 태그에.

<form onsubmit="return false;">

의미 적으로 아마도 버튼 유형을 변경하는 위의 방법만큼 좋은 해결책은 아니지만 제출하지 않는 양식 요소를 원한다면 옵션 인 것처럼 보입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.