วิธีการส่งแบบฟอร์มด้วย 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

คำตอบ:


211

วิธีที่ดีที่สุด

วิธีที่ดีที่สุดคือการใส่แท็กอินพุตที่เหมาะสม:

<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();
});

ใส่โค้ด JavaScript หลังด้วยDOMContentLoadedเหตุการณ์ (เลือกเฉพาะloadสำหรับความเข้ากันได้แบบย้อนหลัง ) หากคุณยังไม่ได้ดำเนินการ:

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วัตถุ DOM ของ<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>

ตอนนี้เรามาถึงจุดที่คุณต้องตัดสินใจสำหรับองค์ประกอบ UI ที่ทริกเกอร์การเรียก submit ()

  1. ปุ่ม

    <button>submit</button>
  2. ลิงค์

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

ใช้เทคนิคดังกล่าวเพื่อเพิ่มผู้ฟังเหตุการณ์


ฉันต้องการใช้สิ่งนี้ แต่ดูเหมือนจะไม่ได้ผลในด้านของฉัน นี่คือซอjsfiddle.net/rbhr9wt2
user1149244

@ user1149244 ในบานหน้าต่าง JavaScript บน jsFiddle คลิกที่ "JavaScript" จากนั้นตั้งค่า "Load Type" เป็น "No wrap - in <body>" (หรือ <head>) โดยค่าเริ่มต้นจะตั้งเป็น "onLoad" หลังจากนั้น DOMContentReady จะไม่เริ่มทำงานอีกต่อไป
ComFreek

3
หมายเหตุ: หากรูปแบบของคุณมีปุ่มที่มี attr name="submit"ที่submit()วิธีการแบบฟอร์มของคุณจะไม่สามารถเข้าถึง
2540625

เหตุใดจึงไม่แนะนำวิธี onclick
nu everest

@nueverest มีความหมายมากกว่าการพูด<input type="submit"> <a href="#" onclick="...">นี่เป็นสิ่งสำคัญอย่างยิ่งสำหรับโปรแกรมอ่านหน้าจอ ถ้าคุณต้องใช้หลังผมจะแนะนำการใช้งานของชาร์ตเพลง
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 ก็ไม่ดี (เร็ว ๆ นี้จะกลายเป็นไม่ดีด้วยเหตุผลด้านความปลอดภัยถัดไป ... จาวาสคริปต์แบบ
อินไลน์

ฉันเห็นด้วย. ตัดสินจากลักษณะของคำถามที่ฉันตอบเพื่อหาคำตอบง่ายๆ สิ่งที่ฉันทำเป็นการส่วนตัวคือใช้href="#"แล้วเลือกลิงก์เหล่านั้นทั้งหมดด้วย jquery และเรียกe.preventDefault()ในclickตัวจัดการเหตุการณ์เพื่อให้เบราว์เซอร์ไม่เลื่อน
มอริซ

3
ฉันชอบคำตอบนี้เป็นการส่วนตัว เรียบง่ายและสะอาดและใช้งานง่ายหากเพจของคุณใช้ JQuery มีความยืดหยุ่นมากเช่นกันเนื่องจากฉันมีหน้าที่มีหลายรูปแบบและทำงานได้อย่างไม่มีที่ติ
John Contarino

หนึ่งสามารถใช้ href = "#" หากมีการเพิ่มที่ส่วนท้ายของการเรียกใช้จาวาสคริปต์ onClick "return false"
Lumis

23

คุณสามารถให้แบบฟอร์มและลิงค์รหัสจากนั้นสมัครเข้า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

ทำให้ปุ่มของคุณปรากฏเป็นลิงค์ Bootstrap

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;

}

ยอดเยี่ยมทำไมต้องซับซ้อนในเมื่อมันง่าย อย่างไรก็ตามฉันคิดว่ามันจะดูดีกว่านี้ถ้าคุณเพิ่ม "cursor: pointer;" ในคลาสโฮเวอร์ดังนั้นเคอร์เซอร์จึงเปลี่ยนเป็นมือ
Lumis

3

ทำงานได้ดีโดยไม่ต้องใช้ฟังก์ชันพิเศษใด ๆ เขียนง่ายกว่าด้วย php เช่นกัน<input onclick="this.form.submit()"/>


OP ระบุโดยคลิกที่ลิงค์ไม่ใช่องค์ประกอบอินพุต
Rahil Wazir

สามารถทำงานนี้โดยทำสิ่งที่ชอบ<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();
} 

ตั้งค่า "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.