Galat “Kirim bukan fungsi” dalam JavaScript


264

Adakah yang bisa memberi tahu saya apa yang salah dengan kode ini? Saya mencoba mengirimkan formulir dengan JavaScript, tetapi kesalahan ".submit bukan fungsi" ditampilkan. Lihat di bawah untuk detail lebih lanjut dari kode:

<form action="product.php" method="get" name="frmProduct" id="frmProduct" enctype="multipart/form-data">

<input onclick="submitAction()" id="submit_value" type="button" name="submit_value" value="">

</form>

<script type="text/javascript">
    function submitAction()
    {
        document.frmProduct.submit();
    }
</script>

Saya juga mencoba ini:

<script type="text/javascript">
    function submitAction()
    {
        document.forms["frmProduct"].submit();
    }
</script>

Keduanya menunjukkan kepada saya kesalahan yang sama :(


Browser mana yang memberi Anda pesan ini? Bisakah Anda memposting sumber lengkap?
harto

Mengingat kode yang diposting berfungsi untuk saya di IE7 dan Chrome2, maka mungkin ada sesuatu yang salah dalam kode yang belum Anda posting?
Lasse V. Karlsen

11
Mungkin Anda memiliki bidang dengan nama atau kirim dan dengan demikian .submit () dibayangi oleh bidang itu?
Lasse V. Karlsen

kesalahan itu terjadi ketika Anda memiliki id = "frmProduct" yang sama dalam elemen yang berbeda.
Optimaz ID

Jawaban:


736

kirim bukan fungsi

berarti Anda menamai tombol kirim Anda atau elemen lain submit. Ubah nama tombol menjadi btnSubmitdan panggilan Anda akan bekerja secara ajaib.

Saat Anda memberi nama tombol kirim, Anda menimpa submit()fungsi pada formulir.


55
Inilah trik yang berguna. Jika Anda terjebak dengan Anda tombol submit makhluk #submit, Anda bisa mendapatkan sekitar itu dengan mencuri bentuk contoh ini lain submit()metode, misalnya: document.createElement('form').submit.call(document.frmProduct).
Neil E. Pearson

35
Sepertinya setiap orang harus belajar ini dengan cara yang sulit. Akan membuat pertanyaan wawancara kerja yang baik
SeanDowney

9
Saya hanya menghapus nama = 'kirim' dan Bob bibi Anda berhasil !!
zzapper

2
Terkagum-kagum saya tidak pernah mengalami hal ini, tetapi sayangnya, itulah masalahnya!
natebeaty

3
Saya hanya menghabiskan 2-3 jam untuk masalah ini, terima kasih banyak untuk jawabannya
Mehul Prajapati

12
<form action="product.php" method="post" name="frmProduct" id="frmProduct" enctype="multipart/form-data">

<input id="submit_value" type="button" name="submit_value" value="">

</form>

<script type="text/javascript">

document.getElementById("submit_value").onclick = submitAction;

function submitAction()
{
    document.getElementById("frmProduct").submit();
    return false;
}
</script>

EDIT: Saya tidak sengaja bertukar id


document.getElementById ("frmProduct"). submit bukan fungsi :(
Jin Yong

1
Apakah Anda memiliki lebih dari satu elemen dengan id 'frmProduct'?
tvanfosson

Menambahkan submAction sebagai handler untuk onsubmit dan kemudian memanggil submit darinya dapat membuat loop tak terbatas. Pawang harus dikaitkan dengan klik tombol.
tvanfosson

1
Menurunkan jawaban yang akurat ya? Lame guys, injak kami untuk mendapatkan poin yang Anda jual untuk jiwa Anda
Chad Grant

@Chad Grant - Tidak bisa setuju lebih banyak.
Fenton

10

Pastikan tidak ada formulir lain dengan nama yang sama dan pastikan tidak ada nama = "kirim" atau id = "kirim" di formulir.


9

Jika Anda tidak memiliki kesempatan untuk berubah, name="submit"Anda juga dapat mengirimkan formulir dengan cara ini:

function submitForm(form) {
    var submitFormFunction = Object.getPrototypeOf(form).submit;
    submitFormFunction.call(form);
}

5
HTMLFormElement.prototype.submit.call(form)juga bekerja
musa

5

Saya memiliki masalah yang sama ketika saya sedang membuat aplikasi MVC menggunakan halaman master. Sudah mencoba mencari elemen dengan 'kirim' sebagai nama seperti yang disebutkan di atas tetapi bukan itu masalahnya.

Untuk kasus saya, ini membuat beberapa tag pada halaman saya sehingga ada beberapa masalah yang merujuk pada formulir yang benar.

Untuk mengatasinya, saya akan membiarkan tombol menangani objek formulir mana yang akan digunakan:

onclick="return SubmitForm(this.form)"

dan dengan js:

function SubmitForm(frm) {
    frm.submit();
}

3

Topik ini sudah memiliki banyak jawaban, tetapi yang paling berhasil (dan paling sederhana - satu baris!) Bagi saya adalah modifikasi dari komentar yang dibuat oleh Neil E. Pearson dari 21 April 2013:

Jika Anda terjebak dengan tombol kirim Anda yang sedang mengirimkan #, Anda bisa mengatasinya dengan mencuri metode kirim () contoh lain formulir.

Modifikasi saya untuk metodenya, dan apa yang berhasil untuk saya:

document.createElement('form').submit.call(document.getElementById(frmProduct));


2

memberikan elemen bentuk nama kirim akan bayangan sederhana properti kirim. pastikan Anda tidak memiliki elemen formulir dengan nama kirim dan Anda harus dapat mengakses fungsi kirim dengan baik.


2

Bahkan, solusinya sangat mudah ...

Asli:

    <form action="product.php" method="get" name="frmProduct" id="frmProduct"
enctype="multipart/form-data">
    <input onclick="submitAction()" id="submit_value" type="button" 
    name="submit_value" value="">
</form>
<script type="text/javascript">
    function submitAction()
    {
        document.frmProduct.submit();
    }
</script>

Larutan:

    <form action="product.php" method="get" name="frmProduct" id="frmProduct" 
enctype="multipart/form-data">
</form>

<!-- Place the button here -->
<input onclick="submitAction()" id="submit_value" type="button" 
    name="submit_value" value="">

<script type="text/javascript">
    function submitAction()
    {
        document.frmProduct.submit();
    }
</script>

Bisakah Anda jelaskan bagaimana ini memecahkan masalah OP.
Kingsley

Yang pasti, dalam hal ini (hanya dalam kasus ini) masalahnya adalah cakupannya.
Zurc Soirrab

1

Anda harus menggunakan kode ini:

$(document).on("ready", function () {
       
        document.frmProduct.submit();
    });


Sementara potongan kode ini dapat menyelesaikan pertanyaan, termasuk penjelasan sangat membantu untuk meningkatkan kualitas posting Anda. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa depan, dan orang-orang itu mungkin tidak tahu alasan untuk saran kode Anda. Tolong juga cobalah untuk tidak membuat kerumunan kode Anda dengan komentar penjelasan, ini mengurangi keterbacaan kode dan penjelasan!
Filnor

0

Apa yang saya gunakan adalah

var enviar = document.getElementById("enviar");
enviar.type = "submit"; 

Hanya karena semuanya tidak berfungsi.


0

Solusi bagi saya adalah mengatur atribut "form" dari tombol

<form id="form_id_name"><button name="btnSubmit" form="form_id_name" /></form>

atau js:

YOURFORMOBJ.getElementsByTagName("button")[0].setAttribute("form", "form_id_name");
YOURFORMOBJ.submit();

0

Solusi yang memungkinkan -
1.Pastikan Anda tidak memiliki elemen lain dengan nama / id yang dikirimkan.
2. Coba panggil fungsi sebagai onClick = "return submitAction();"
3.document.getElementById("form-name").submit();


-1

Anda dapat mencoba

<form action="product.php" method="get" name="frmProduct" id="frmProduct" enctype="multipart/form-data">

<input onclick="submitAction(this)" id="submit_value" type="button" name="submit_value" value="">

</form>

<script type="text/javascript">
function submitAction(element)
{
    element.form.submit();
}
</script>

Apakah Anda tidak memiliki lebih dari satu formulir dengan nama yang sama?


-1

Gunakan getElementById:

document.getElementById ('frmProduct').submit ()
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.