Bagaimana cara mengirimkan formulir dengan JavaScript dengan mengklik link?


123

Alih-alih tombol kirim, saya memiliki tautan:

<form>

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

</form>

Bisakah saya membuatnya mengirimkan formulir saat diklik?


Saya menggunakan ini untuk mengintegrasikan formulir yang sepenuhnya tersembunyi ke dalam halaman. Tetapi ada jeda baris sebelum dan sesudah tautan. Apakah mereka berasal dari elemen bentuk? Dan saya ingin membuka link di tab / halaman baru, target="_blank"sepertinya tidak berfungsi.
JPT

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

Jawaban:


210

Jalan terbaik

Cara terbaik adalah dengan memasukkan tag masukan yang sesuai:

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

Cara JS terbaik

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

Lampirkan kode JavaScript terakhir dengan sebuah DOMContentLoadedperistiwa (pilih hanya loaduntuk kompatibilitas mundur ) jika Anda belum melakukannya:

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

Cara yang mudah, tidak dapat diatur (jawaban sebelumnya)

Tambahkan onclickatribut ke tautan dan idke formulir:

<form id="form-id">

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

</form>

Semua cara

Apapun cara yang Anda pilih, pada formObject.submit()akhirnya Anda akan dipanggil (di mana formObjectobjek DOM dari <form>tag).

Anda juga harus mengikat pengendali kejadian tersebut, yang memanggil formObject.submit(), sehingga dipanggil ketika pengguna mengklik tautan atau tombol tertentu. Ada dua cara:

  • Direkomendasikan: Ikat event listener ke objek 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();
    });
  • Tidak disarankan: Sisipkan JavaScript sebaris. Ada beberapa alasan mengapa teknik ini tidak direkomendasikan. Salah satu argumen utamanya adalah Anda mencampur markup (HTML) dengan skrip (JS). Kode menjadi tidak teratur dan agak tidak dapat dikelola.

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

Sekarang, kita sampai pada titik di mana Anda harus memutuskan elemen UI yang memicu panggilan submit ().

  1. Sebuah tombol

    <button>submit</button>
  2. Sebuah link

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

Terapkan teknik yang disebutkan di atas untuk menambahkan pendengar acara.


Saya ingin menerapkan ini tetapi tampaknya tidak berhasil di pihak saya. Ini biola, jsfiddle.net/rbhr9wt2
pengguna1149244

@ user1149244 Pada panel JavaScript di jsFiddle klik "JavaScript" dan kemudian setel "Load Type" ke "No wrap - in <body>" (atau <head>). Secara default, ini disetel ke "onLoad" setelah itu DOMContentReady tidak aktif lagi.
ComFreek

3
Catatan: Jika formulir Anda memiliki tombol dengan attr name="submit", submit()metode formulir Anda tidak akan dapat diakses.
2540625

Mengapa metode onclick tidak disarankan?
nu everest

@nueverest An <input type="submit">memiliki lebih banyak makna semantik daripada, katakanlah <a href="#" onclick="...">,. Hal ini penting terutama untuk pembaca layar. Jika Anda harus menggunakan yang terakhir, saya sarankan untuk menggunakan ARIA .
ComFreek

65

Jika Anda menggunakan jQuery dan membutuhkan solusi inline, ini akan bekerja dengan sangat baik;

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

Juga, Anda mungkin ingin mengganti

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

dengan

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

agar pengguna tidak menggulir ke bagian atas halaman Anda saat mengklik link.


1
Saya yakin akan lebih baik jika dibuat dalam <span> teks </span>. Ini bukan tautan, dan href: javascript tidak bagus. (segera menjadi buruk dengan alasan keamanan berikutnya ... javascript inline akan dilarang suatu hari nanti.
Milche Patern

Saya setuju. Menilai dari sifat pertanyaannya, saya mencari jawaban sederhana. Apa yang saya pribadi lakukan adalah menggunakan href="#"dan kemudian memilih semua tautan tersebut dengan jquery dan memanggil e.preventDefault()di clickevent handler sehingga browser tidak menggulir.
Maurice

3
Saya pribadi lebih suka jawaban ini. Sederhana dan bersih dan mudah diterapkan jika halaman Anda menggunakan JQuery. Sangat fleksibel juga, karena saya memiliki halaman dengan berbagai bentuk dan bekerja dengan sempurna.
John Contarino

Seseorang dapat menggunakan href = "#" jika ditambahkan di akhir panggilan javascript onClick "return false"
Lumis

23

Anda dapat memberikan formulir dan tautan beberapa id dan kemudian berlangganan untuk onclickacara tautan dan submitformulir:

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

lalu:

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

Saya akan merekomendasikan Anda menggunakan tombol kirim untuk mengirimkan formulir karena itu menghormati semantik markup dan itu akan berfungsi bahkan untuk pengguna dengan javascript dinonaktifkan.


4

HTML & CSS - Tanpa Solusi Javascript

Buat tombol Anda muncul seperti tautan 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;

}

Luar biasa, mengapa membuatnya rumit padahal bisa jadi sederhana. Namun, menurut saya akan terlihat lebih baik jika Anda juga menambahkan "cursor: pointer;" di kelas hover, sehingga kursor berubah menjadi tangan.
Lumis

3

ini bekerja dengan baik tanpa memerlukan fungsi khusus. Jauh lebih mudah untuk menulis dengan php juga.<input onclick="this.form.submit()"/>


OP dinyatakan dengan mengklik link bukan elemen masukan.
Rahil Wazir

Dapatkah ini berhasil dengan melakukan sesuatu seperti<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
Bisakah Anda menjelaskan bagaimana jawaban Anda sebenarnya menjawab pertanyaan? Tolong tambahkan lebih banyak konteks untuk itu.

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

Ini bekerja dengan sempurna dalam kasus saya.

Anda dapat menggunakannya dalam fungsi juga seperti,

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

Tetapkan "theForm" sebagai ID formulir Anda. Selesai.


0

inilah solusi terbaik untuk pertanyaan Anda: di dalam formulir Anda memiliki kode ini:

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

di file CSS, lakukan ini:

button{
  display: none;
}

di JS Anda melakukan ini:

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

Ini dia.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.