<form> 태그 외부의 버튼을 사용하여 양식을 제출하십시오.


301

내가 가지고 있다고 말하십시오 :

<form method="get" action="something.php">
    <input type="text" name="name" />
</form>

<input type="submit" />

양식 외부의 제출 버튼을 사용하여 해당 양식을 제출하는 방법은 HTML5에서 제출에 대한 작업 속성이 있다고 생각하지만 완전히 크로스 브라우저인지 여부와 확실하지 않은지 확실하지 않습니다. 이 작업을 수행?


2
자바 스크립트 없이는 그렇게 할 수 없다고 생각합니다. 브라우저는 어떤 형식인지 어떻게 알 수 있습니까? 여러 가지가있을 수 있습니다. 양식 안에 제출 버튼을 넣을 수없는 이유는 무엇입니까?
Keith

1
JS를 사용하고 싶지 않다면 html (<5)에서는 호기심으로 인해 불가능 해 보이는 이유는 무엇입니까?
Kumar

1
버튼이 디자인되어 있기 때문에 버튼을 모두 업데이트 할 수있는 버튼이있는 다중 탭 설정 영역이 있습니다. 이 질문은 중복 된 것처럼 보이기 때문에 HTML5 옵션 또는 JS 솔루션으로 롤링하려고합니다.
daryl

1
@Kumar, 나는 또한 불가능하다 생각했지만, 그렇지 않은 것 같습니다 stackoverflow.com/a/23456905/932473
DAV

답변:


84

업데이트 : 최신 브라우저에서는이 form속성을 사용 하여이 작업을 수행 할 수 있습니다 .


내가 아는 한 자바 스크립트가 없으면이 작업을 수행 할 수 없습니다.

사양은 다음과 같습니다.

컨트롤을 만드는 데 사용되는 요소는 일반적으로 FORM 요소 내부에 나타나지만 사용자 인터페이스를 작성하는 데 사용될 때 FORM 요소 선언 외부에 나타날 수도 있습니다. 이것은 본질적인 이벤트 섹션에서 논의됩니다. 폼 외부의 컨트롤은 성공적인 컨트롤이 될 수 없습니다.

그게 내 대담

submit버튼 제어 여겨진다.

http://www.w3.org/TR/html4/interact/forms.html#h-17.2.1

의견에서

버튼이 디자인되어 있기 때문에 버튼을 모두 업데이트 할 수있는 버튼이있는 다중 탭 설정 영역이 있습니다.

input양식 내부를 배치하지 말고 CSS를 사용하여 페이지의 다른 위치에 배치하십시오.


19
참고로, HTML5 지원, 아직 완벽하지는 않지만 그 결과가 나오고 있습니다 : impressionwebs.com/html5-form-attribute
Shackrock

6
나는 여기에 조금 늦었지만 어떻게 입력을 양식에 넣을 수 있지만 다른 곳에 배치 할 수 있습니까?
cgf

html4에 대해 <button> 태그를 사용할 수 있습니다.
degr

2016 년 현재 다람쥐의 답변이 작동하므로 답변이 더 이상 유효하지 않습니다.
Peter

제안 된 JavaScript 솔루션에 대한 우려가 있습니다. 예를 들어 최신 Chrome에서는 HTML5 유효성 검사 (필수 등)를 건너 뜁니다. 내가 생각할 수있는 하나의 솔루션은 두 개의 제출 버튼, 하나는 숨겨져 있다는 것입니다. 숨겨진 버튼에서 클릭이 발생해야합니다. 적절한 검증없이 양식을 제출해서는 안됩니다.
빅터 n.

612

HTML5 에는 form 속성이 있습니다. 원래

<form id="myform" method="get" action="something.php">
    <input type="text" name="name" />
</form>

<input type="submit" form="myform" />

35
IE를 사용하려는 사람에게는 IE에서 작동하지 않습니다. 나는 그것을 사용했지만 IE 브라우저에서 양식을 수동으로 제출하기 위해 이벤트 제출 기능 콜백을 추가하기로 결정했습니다.
racl101

1
정확히 어떤 IE 버전입니까?
mwld

11
나는 이것을 우아한 폴백으로했다 : <button type="submit" form="frmFoo" onclick="!this.form&&$('#'+$(this).attr('form')).submit()">실험이 밝혀 졌을 때 this.form은 DomElement의 첨부 양식이지만 그렇지 않으면 null입니다. // 편집 : jQuery이지만 바닐라에서도 가능
Adrian Föder

2
MS Edge에서 양식 속성을 보려면 여기에서 투표하십시오 : wpdev.uservoice.com/forums/257854-microsoft-edge-developer/…
mkurz

2
@ AdrianFöder 대체의 바닐라 JS 버전은 다음과 같습니다<button type="submit" form="frmFoo" onclick="!this.form && document.getElementById('myform').submit()">
romaricdrigon

318

나를 위해 잘 작동하는 솔루션은 여전히 ​​여기에 없습니다. 에 시각적으로 숨겨져 <submit>있거나 <input type="submit">요소가 <form>있고 <label>외부에 관련 요소가 있어야합니다. 다음과 같이 보일 것입니다 :

<form method="get" action="something.php">
     <input type="text" name="name" />
     <input type="submit" id="submit-form" class="hidden" />
</form>

<label for="submit-form" tabindex="0">Submit</label>

이제이 링크를 사용하면 <submit>요소를 클릭하여 양식 요소 를 '클릭'할 수 있습니다 <label>.


4
js와 주요 변경이 필요없는 더 나은 솔루션 imho :)
Anton Hasan

52
IE 11에서도 작동합니다. 같은 문장에서 "works"와 "IE"가 자주 표시되지 않습니다.
shim

2
비 호환성없는 더 나은 솔루션. Twitter 부트 스트랩을 사용하는 경우 레이블 CSS 클래스에 "btn btn-primary"를 사용하면 완벽하게 작동합니다.
Juanda

7
매우 좋은 해결책이지만이 방법을 사용하는 것에 대한 반대 의견이있을 수 있습니다. A label는 포커스 가능한 요소 (AFAIK)가 아니므로 키보드 만 사용하여 '버튼'으로 이동 한 다음 스페이스를 눌러 해당 버튼을 활성화하는 사용자에게는 직관적이지 않습니다. ( <enter>대신 키보드를 사용하여 양식을 탐색하는 데 익숙하지는 않습니다.)
Auke

11
labelvia 탭 버튼에 초점을 맞추기 위해이 질문에 따라 tabindexHTML 속성을 사용할 수 있습니다 .<label for="submit-form" tabindex="0">Submit</label>
MarthyM

47

jQuery를 사용할 수 있다면 이것을 사용할 수 있습니다

<form method="get" action="something.php" id="myForm">
    <input type="text" name="name" />

    <input type="submit" style="display:none" />
</form>

<input type="button" value="Submit" id="myButton" />

<script type="text/javascript">
    $(document).ready(function() {
       $("#myButton").click(function() {
           $("#myForm").submit();
       });
    });
</script>

따라서 결론은 제출과 같은 버튼을 만들고 실제 제출 버튼을 양식에 넣고 (물론 숨기고) '가짜 제출'버튼을 클릭하여 jquery로 양식을 제출하는 것입니다. 도움이 되길 바랍니다.


1
HTML5 지원 브라우저와 IE 모두에서 작동하게하려면 여기 jQuery가 있습니다$('button[form]').click(function (){ var formId = $(this).attr('form'); $('#' + formId).submit(); });
Snook

35
<form method="get" id="form1" action="something.php">

</form>

<!-- External button-->
<button type="submit" form="form1">Click me!</button>

이것은 양식에 대한 원격 제출 버튼을 갖기 위해 저에게 효과적이었습니다.


고마워요.이 간단한 기능으로 JS 코드 줄을 쓰고 싶지 않습니다. 추신 : 내 응용 프로그램은 IE를 지원 할 필요가 없습니다
Mani

1
MS Edge에서 양식 속성 기능을 보려면 여기에 투표하십시오. wpdev.uservoice.com/forums/257854-microsoft-edge-developer/…
mkurz

22

약간의 수정으로 다른 솔루션과 유사합니다.

<form method="METHOD" id="FORMID">
   <!-- ...your inputs -->
</form>
<button type="submit" form="FORMID" value="Submit">Submit</button>

https://www.w3schools.com/tags/att_form.asp


이것이 가장 좋은 답입니다. IMO. 버튼의 양식 속성에서 MDN에서 직접 : 버튼이 연결된 양식 요소 (양식 소유자). 속성 값은 동일한 문서에서 <form> 요소의 id 속성이어야합니다. 이 속성을 지정하지 않으면 <button> 요소는 상위 <form> 요소 (있는 경우)와 연관됩니다. 이 속성을 사용하면 <form> 요소의 하위 항목이 아니라 <button> 요소를 문서의 어느 곳에서나 <form> 요소에 연결할 수 있습니다.
AlexSashaRegan

주의 : 즉, 인터넷 익스플로러 11에서 작동하지 않습니다 여기를보십시오 : cdpn.io/mdix/debug/PooPqaM/PNAvYKNJojRr
마크 딕스

19

이 시도:

<input type="submit" onclick="document.forms[0].submit();" />

비록 id에 양식을 추가하고 대신에 액세스하는 것이 좋습니다 document.forms[index].


1
그래, 나는 자바 스크립트로 그것을하는 방법을 알고있다. 내가 그것을 보면 자바 스크립트로 태그하지 않았다.
daryl

죄송합니다. 게시물에서 JS 이외의 방법을 찾고 있음이 명확하지 않았습니다 (JS에서 태그를 놓친 것으로 생각했습니다).
Mr.

1
다른 양식 안에있는 단추를 사용하여 외부 양식을 제출하려는 경우이 방법을 사용하는 것이 가장 좋습니다.
Vahid Amiri

11

언제든지 jQuery를 사용할 수 있습니다.

<form id="myForm">
  <!-- form controls -->
</form>
<input type="submit" id="myButton">

<script>
$(document).ready(function () {
  $("#myButton").click(function () {
    $("#myForm").submit();
  });
});
</script>

8

여기에 최고의 아이디어를 통합하고 Offerein 's로 강조 표시된 문제에 대한 솔루션을 포함하는 매우 견고한 솔루션이 있습니다. 자바 스크립트가 사용되지 않습니다.

IE (및 Edge 13)와의 이전 버전과의 호환성에 관심이 있다면 form="your-form" 속성을 사용할 수 없습니다 .

display none과 함께 표준 제출 입력을 사용하고 양식 외부에 레이블을 추가하십시오.

<form id="your-form">
  <input type="submit" id="your-form-submit" style="display: none;">
</form>

의 사용에 유의하십시오 display: none;. 이것은 의도적 인 것입니다. 부트 스트랩의 .hidden클래스를 사용하면 jQuery .show()및 and와 충돌 .hide()하므로 Bootstrap 4에서는 더 이상 사용되지 않습니다.

이제 제출 용 레이블을 추가하십시오 (부트 스트랩 스타일).

<label for="your-form-submit" role="button" class="btn btn-primary" tabindex="0">
  Submit
</label>

다른 솔루션과 달리 tabindex ( 0으로 설정) 도 사용 하고 있습니다. 이제 키보드 태 빙과 호환됩니다. role="button"속성을 추가하면 CSS 스타일이 제공됩니다 cursor: pointer. 에일 라 ( 이 바이올린 참조 ).


좋은! IE11 및 firefox와 잘 작동했습니다. 감사!
eaglei22

@ eaglei22 들어 봐 기쁘다 :)
Jonathan Jonathan

다른 곳의 모든 기능 / 제안을 정리하는 것이 매우 도움이됩니다. 감사합니다. 그러나 이제 버튼 / 레이블을 탭해도 키보드에서 버튼을 "클릭"하는 방법을 볼 수 없습니다 Enter. 예를 들어, 누르는 것은 효과가 없습니다. 따라서 탭 할 수 있다는 것은 무의미합니다. JavaScript를 사용하지 않고 이것을 수행하는 방법이 있습니까?
앤드류 빌렘 스

@AndrewWillems 좋은 지적입니다. 불행히도 자바 스크립트없이 클릭 이벤트를 트리거하기 위해 키보드를 사용하는 방법을 찾지 못했습니다. 추신 : 게시물이 도움이 되었으면 투표하십시오. 비용이 들지 않지만 유용한 답변을 제공하는 사람에게는 많은 의미가 있습니다.
Jonathan

1
그리고 나는 조잡하고 잘못된 <input... />자체 폐쇄 구문 을 수정하는 것에 대해 당신을 사랑합니다 . :) Kudos!
Sz.

3

이것은 완벽하게 작동합니다! ;)

이것은 Ajax를 사용하여 수행 할 수 있으며 "폼 미러 요소"라고 부릅니다. 외부에 요소가있는 양식을 보내는 대신 가짜 양식을 작성할 수 있습니다. 이전 양식은 필요하지 않습니다.

<!-- This will do the trick -->
<div >
    <input id="mirror_element" type="text" name="your_input_name">
    <input type="button" value="Send Form">
</div>

코드 아약스는 다음과 같습니다.

    <script>
        ajax_form_mirror("#mirror_element", "your_file.php", "#your_element_response", "POST");

        function ajax_form_mirror(form, file, element, method) {
            $(document).ready(function() {
                // Ajax
                $(form).change(function() { // catch the forms submit event
                    $.ajax({                // create an AJAX call...
                        data: $(this).serialize(),      // get the form data
                        type: method,                   // GET or POST
                        url: file,                      // the file to call
                        success: function (response) {   // on success..
                        $(element).html(response);  // update the DIV
                        }
                    });

                    return false; // cancel original event to prevent form submitting
                });
            });
        }
   </script>

부모 양식을 제출하지 않고 다른 양식으로 일부 데이터를 보내려는 경우 매우 유용합니다.

이 코드는 필요에 따라 조정 / 최적화 될 수 있습니다. 완벽하게 작동합니다 !! ;) 다음과 같은 선택 옵션 상자를 원하는 경우에도 작동합니다.

<div>
    <select id="mirror_element" name="your_input_name">
        <option id="1" value="1">A</option>
        <option id="2" value="2">B</option>
        <option id="3" value="3">C</option>
        <option id="4" value="4">D</option>
    </select>
</div>

나는 그것이 나를 돕는 것처럼 누군가를 도왔기를 바랍니다. ;)


1

어쩌면 이것이 효과가 있을지 모르지만 이것이 유효한 HTML인지 모르겠습니다.

<form method="get" action="something.php">
    <input type="text" name="name" />
    <input id="submitButton" type="submit" class="hide-submit" />
</form>

<label for="submitButton">Submit</label>

3
이 질문에 대한 답은 이미 존재합니다. stackoverflow.com/a/23456905/2968465
Jayant Bhawal

0

표 셀 요소에서 양식을 숨기려고했지만 여전히 양식 제출 버튼을 표시하는 문제가있었습니다. 문제는 양식 요소가 여전히 여분의 빈 공간을 차지하여 테이블 셀의 형식이 이상하게 보였습니다. 표시 : 없음 및 가시성 : 숨겨진 속성은 제출 버튼을 숨기려고했기 때문에 작동하지 않았습니다. 간단한 대답은 CSS를 사용하여 양식 높이를 거의 아무것도 설정하지 않는 것입니다.

그래서,

CSS-

    #formID {height:4px;}

나를 위해 일했다.


0

나는이 방법을 사용했으며 친절하게 그것을 좋아했으며 제출하기 전에 양식을 확인하고 safari / Google과 호환됩니다. jquery 없음 nn

        <module-body>
            <form id="testform" method="post">
                <label>Input Title</label>
                <input name="named1" placeholder="Placeholder"  title="Please enter only alphanumeric characters." required="required" pattern="[A-Za-z0-9]{1,20}" />
                <alert>No Alerts!</alert>

                <label>Input Title</label>
                <input placeholder="Placeholder" title="Please enter only alphanumeric characters." required="required" pattern="[A-Za-z0-9]{1,20}" />
                <alert>No Alerts!</alert>

                <label>Input Title</label>
                <input placeholder="Placeholder" title="Please enter only alphanumeric characters." required="required" pattern="[A-Za-z0-9]{1,20}" />
                <alert>No Alerts!</alert>
            </form>
        </module-body>
        <module-footer>
            <input type="button" onclick='if (document.querySelector("#testform").reportValidity()) { document.querySelector("#testform").submit(); }' value="Submit">
            <input type="button" value="Reset">
        </module-footer>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.