링크를 클릭하여 JavaScript로 양식을 제출하는 방법은 무엇입니까?


123

제출 버튼 대신 링크가 있습니다.

<form>

  <a href="#"> submit </a>

</form>

클릭하면 양식을 제출할 수 있습니까?


나는 이것을 사용하여 완전히 숨겨진 양식을 페이지에 통합합니다. 그러나 링크 앞뒤에 줄 바꿈이 있습니다. 양식 요소에서 왔습니까? 새 탭 / 페이지에서 링크를 열고 싶은데 target="_blank"작동하지 않는 것 같습니다.
JPT

1
tl; dr <a role="button" aria-label="submit form" href="javascript:void(0)" onclick="document.querySelector('form').submit()">Submit</a>
Josh Habdas

답변:


210

가장 좋은 방법

가장 좋은 방법은 적절한 입력 태그를 삽입하는 것입니다.

<input type="submit" value="submit" />

최고의 JS 방식

<form id="form-id">
  <button id="your-id">submit</button>
</form>
var form = document.getElementById("form-id");

document.getElementById("your-id").addEventListener("click", function () {
  form.submit();
});

에 의해 후자의 자바 스크립트 코드를 동봉 DOMContentLoaded(만 선택 이벤트 load에 대한 역 compatiblity 아직 수행하지 않은 경우)

window.addEventListener("DOMContentLoaded", function () {
  var form = document.... // copy the last code block!
});

쉽고 추천 할 수없는 방법 (이전 답변)

onclick링크와 id양식에 속성을 추가하십시오 .

<form id="form-id">

  <a href="#" onclick="document.getElementById('form-id').submit();"> submit </a>

</form>

모든 길

어떤 방법을 선택하든 formObject.submit()결국 호출을 받게됩니다 formObject.<form> 태그 ).

또한를 호출하는 이러한 이벤트 핸들러를 바인딩해야 formObject.submit()하므로 사용자가 특정 링크 나 버튼을 클릭 할 때 호출됩니다. 두 가지 방법이 있습니다.

  • 권장 : 이벤트 리스너를 DOM 개체에 바인딩합니다.

    // 1. Acquire a reference to our <form>.
    //    This can also be done by setting <form name="blub">:
    //       var form = document.forms.blub;
    
    var form = document.getElementById("form-id");
    
    
    // 2. Get a reference to our preferred element (link/button, see below) and
    //    add an event listener for the "click" event.
    document.getElementById("your-id").addEventListener("click", function () {
      form.submit();
    });
  • 권장하지 않음 : 인라인 JavaScript를 삽입하십시오. 이 기술이 권장되지 않는 몇 가지 이유가 있습니다. 한 가지 주요 주장은 마크 업 (HTML)과 스크립트 (JS)를 혼합한다는 것입니다. 코드가 정리되지 않고 유지 관리가 불가능 해집니다.

    <a href="#" onclick="document.getElementById('form-id').submit();">submit</a>
    
    <button onclick="document.getElementById('form-id').submit();">submit</button>

이제 submit () 호출을 트리거하는 UI 요소를 결정해야하는 시점에 도달했습니다.

  1. 단추

    <button>submit</button>
  2. 링크

    <a href="#">submit</a>

이벤트 리스너를 추가하려면 앞서 언급 한 기술을 적용하십시오.


나는 이것을 적용하고 싶었지만 그것은 내 편에서 작동하지 않는 것 같습니다. 여기에 바이올린,의 jsfiddle.net/rbhr9wt2
user1149244

@ user1149244 jsFiddle의 JavaScript 창에서 "JavaScript"를 클릭 한 다음 "Load Type"을 "No wrap-in <body>"(또는 <head>)로 설정합니다. 기본적으로 DOMContentReady가 더 이상 실행되지 않는 "onLoad"로 설정됩니다.
ComFreek

3
참고 : 양식은 ATTR와 버튼이있는 경우 name="submit"submit()양식의 방법은 액세스 할 수 없습니다.
2540625 2016

onclick 방법이 권장되지 않는 이유는 무엇입니까?
nu everest

@nueverest An <input type="submit">은 예를 들어 <a href="#" onclick="...">. 이것은 스크린 리더와 관련하여 특히 중요합니다. 후자를 사용해야한다면 ARIA 를 사용하는 것이 좋습니다 .
ComFreek

65

jQuery를 사용하고 인라인 솔루션이 필요한 경우 이것은 매우 잘 작동합니다.

<a href="#" onclick="$(this).closest('form').submit();">submit form</a>

또한

<a href="#">text</a>

<a href="javascript:void(0);">text</a>

따라서 사용자가 링크를 클릭 할 때 페이지 상단으로 스크롤하지 않습니다.


1
<span> 텍스트 </ span>로 만드는 것이 더 나을 것이라고 생각합니다. 링크가 아니며 href : javascript는 좋지 않습니다. (곧 다음 보안상의 이유로 나빠질 것입니다 ... 인라인 자바 스크립트는 언젠가 금지 될 것입니다.
Milche Patern 2013

나는 동의한다. 질문의 성격 상 간단한 대답을하려고 했어요. 내가 개인적으로하는 일은 href="#"jquery로 모든 링크를 선택한 다음 이벤트 핸들러 e.preventDefault()에서 호출 click하여 브라우저가 스크롤되지 않도록하는 것입니다.
Maurice

3
개인적으로이 답변을 선호합니다. 페이지가 JQuery를 사용하는 경우 간단하고 깔끔하며 구현하기 쉽습니다. 여러 양식이있는 페이지가 있고 완벽하게 작동하기 때문에 매우 유연합니다.
John Contarino

하나 하나가 온 클릭 자바 스크립트 호출 "반환 거짓"의 끝 부분에 추가하는 경우 HREF는 "#"을 = 사용할 수 있습니다
Lumis

23

양식과 링크에 일부 ID를 제공 한 다음 onclick링크 및 submit양식 의 이벤트 를 구독 할 수 있습니다.

<form id="myform" action="" method="POST">
    <a href="#" id="mylink"> submit </a>
</form>

그리고:

window.onload = function() {
    document.getElementById('mylink').onclick = function() {
        document.getElementById('myform').submit();
        return false;
    };
};

마크 업 의미를 존중하고 자바 스크립트가 비활성화 된 사용자에게도 작동하므로 양식 제출을 위해 제출 버튼을 사용하는 것이 좋습니다.


4

HTML 및 CSS-Javascript 솔루션 없음

버튼이 부트 스트랩 링크처럼 보이게합니다.

HTML :

<form>
    <button class="btn-link">Submit</button>
</form>

CSS :

.btn-link {

    background: none;
    border: none;
    padding: 0px;
    color: #3097D1;
    font: inherit;

}

.btn-link:hover {

    color: #216a94;
    text-decoration: underline;

}

훌륭합니다. 간단 할 수 있는데 왜 복잡하게 만드십시오. 하지만 "커서 : 포인터"를 추가하면 더 좋아 보인다고 생각합니다. hover 클래스에서 커서가 손으로 바뀝니다.
Lumis

3

이것은 특별한 기능 없이도 잘 작동합니다. PHP로도 작성하기가 훨씬 쉽습니다.<input onclick="this.form.submit()"/>


입력 요소가 아닌 링크를 클릭하여 명시된 OP .
Rahil Wazir 2014

수 같은 것을 수행하여이 작품<input onclick="this.form.submit()"> Some Text</input>
CodyBugstein

2
<form id="mailajob" method="post" action="emailthijob.php">
    <input type="hidden" name="action" value="emailjob" />
    <input type="hidden" name="jid" value="<?php echo $jobid; ?>" />
</form>

<a class="emailjob" onclick="document.getElementById('mailajob').submit();">Email this job</a>

3
귀하의 답변이 실제로 질문에 어떻게 답하는지 설명해 주시겠습니까? 더 많은 컨텍스트를 추가하십시오.

1
document.getElementById("theForm").submit();

제 경우에는 완벽하게 작동합니다.

다음과 같은 기능에서도 사용할 수 있습니다.

function submitForm()
{
     document.getElementById("theForm").submit();
} 

양식 ID로 "theForm"을 설정하십시오. 끝났다.


0

귀하의 질문에 대한 최상의 솔루션은 다음과 같습니다. 양식 안에 다음 코드가 있습니다.

<li><a href="#">Singup</a></li>
<button type="submit" id="haha"></button>

CSS 파일에서 다음을 수행하십시오.

button{
  display: none;
}

JS에서는 다음을 수행합니다.

$("a").click(function(){
   $("button").trigger("click");
})

됐습니다.

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