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 :(

Jin Yong
sumber
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.

epascarello
sumber
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

Chad Grant
sumber
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.

gopeca
sumber
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);
}
Terbiy
sumber
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();
}
Quangahh
sumber
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));

Jlemley
sumber
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.

Ahmed Eid
sumber
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>
Zurc Soirrab
sumber
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();
    });

AnilSengul
sumber
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.

compraspro.com
sumber
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();
ProtonIonNeutron
sumber
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();

Ram Thota
sumber
-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?

Fabien Ménager
sumber
-1

Gunakan getElementById:

document.getElementById ('frmProduct').submit ()
Ilya Birman
sumber