JavaScript'te "Gönderme bir işlev değil" hatası


264

Birisi bana bu kodda neyin yanlış gittiğini söyleyebilir mi? JavaScript ile bir form göndermeye çalıştım, ancak bir hata ".submit bir işlev değil" gösterilmiştir. Kodla ilgili daha fazla ayrıntı için aşağıya bakın:

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

Ben de denedim:

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

Her ikisi de bana aynı hatayı gösteriyor :(


Hangi tarayıcı size bu mesajı veriyor? Kaynağın tamamını gönderebilir misiniz?
harto

Gönderilen kodun hem IE7 hem de Chrome2'de benim için çalıştığını düşünürsek, kodda göndermediğiniz yanlış bir şey olabilir mi?
Lasse V. Karlsen

11
Belki de ad veya kimliğe gönderme adıyla bir alanınız vardır ve bu nedenle .submit () bu alan tarafından gölgelenir?
Lasse V. Karlsen

farklı elemanlarda aynı id = "frmProduct" olduğunda bu hata oluştu.
Optimaz ID

Yanıtlar:


736

gönderme bir işlev değildir

gönderme düğmenizi veya başka bir öğeyi adlandırdığınız anlamına gelir submit. Düğmeyi şu şekilde yeniden adlandırın:btnSubmit aramanız sihirli bir şekilde çalışır.

Gönder düğmesine ad verdiğinizde submit(), formdaki işlevi geçersiz kılarsınız .


55
İşte kullanışlı bir numara. Eğer gönderme düğmesi varlık ile sıkışmış iseniz #submit, başka bir formu örneğinin çalarak etrafında alabilirsiniz submit()mesela yöntemini: document.createElement('form').submit.call(document.frmProduct).
Neil E. Pearson

35
Herkesin bunu zor yoldan öğrenmesi gerekiyor gibi görünüyor. İyi bir iş görüşmesi sorusu
yapardım

9
Ben sadece adı 'gönder' kaldırıldı ve Bob o teyze çalıştı !!
zzapper

2
Hiç bu kadar uğraşmadım ama ne yazık ki sorun buydu!
natebeaty

3
Bu konu için 2-3 saatimi boşa harcadım, cevap için çok teşekkürler
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: Yanlışlıkla kimliği takas


document.getElementById ("frmProduct"). gönder bir işlev değil :(
Jin Yong

1
'FrmProduct' kimliğine sahip birden fazla öğeniz var mı?
tvanfosson

Sububment için bir işleyici olarak sendAction eklemek ve daha sonra ondan gönderme çağırmak sonsuz bir döngü oluşturabilir. İşleyici, düğmenin tek tıklanmasıyla ilişkilendirilmelidir.
tvanfosson

1
Doğru cevapları küçümsemek ha? topal beyler, ruhlarınızı sattığınız puanları almak için bize adım atın
Chad Grant

@Chad Grant - Daha fazla anlaşamadım.
Fenton

10

Aynı ada sahip başka bir form olmadığından ve formda ad = "gönder" veya id = "gönder" olmadığından emin olun.


9

Değiştirme name="submit"şansınız yoksa formu aşağıdaki şekilde de gönderebilirsiniz:

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

5
HTMLFormElement.prototype.submit.call(form)ayrıca çalışır
musa

5

Ben ana sayfaları ile kullanarak bir MVC uygulaması oluştururken aynı sorunu vardı. Yukarıda belirtildiği gibi 'gönder' olan öğe aramaya çalıştım, ancak durum böyle değildi.

Benim durumum için sayfamda birden fazla etiket oluşturdu, bu yüzden doğru forma referansta bazı sorunlar vardı.

Bu soruna geçici bir çözüm bulmak için hangi form nesnesini kullanmak için düğme işlemesine izin vereceğim:

onclick="return SubmitForm(this.form)"

ve js ile:

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

3

Bu konunun zaten birçok yanıtı var, ancak benim için en iyi (ve en basit - bir satır!) İşe yarayan konu, Neil E. Pearson tarafından 21 Nisan 2013'ten yapılan yorumda bir değişiklikti:

Gönderme düğmenizin #submit olması durumunda sıkışırsanız, başka bir form örneğinin send () yöntemini çalarak bunun üstesinden gelebilirsiniz.

Metodunda yaptığım değişiklik ve benim için ne işe yaradı:

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


2

bir form öğesine gönderme adı vermek basitçe gönderme özelliğini gölgeleyecektir. gönderme adında bir form öğeniz olmadığından ve gönderme işlevine erişebildiğinizden emin olun.


2

Aslında, çözüm çok kolay ...

Orijinal:

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

Çözüm:

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

Bunun OP'nin problemini nasıl çözdüğünü açıklar mısınız?
Kingsley

Elbette, bu durumda (sadece bu durumda) sorun kapsamdır.
Zurc Soirrab

1

Bu kodu kullanmalısınız:

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


Bu kod snippet'i soruyu çözebilir, ancak bir açıklama da dahil olmak , yayınınızın kalitesini artırmaya yardımcı olur. Gelecekte okuyucular için soruyu cevapladığınızı ve bu kişilerin kod önerinizin nedenlerini bilmeyebileceğini unutmayın. Lütfen kodunuzu açıklayıcı yorumlarla doldurmamaya çalışın, bu hem kodun hem de açıklamaların okunabilirliğini azaltır!
Filnor

0

Kullandığım şey

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

Çünkü her şey çalışmadı.


0

Benim için çözüm düğmenin "form" özelliğini ayarlamak oldu

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

veya js:

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

0

Olası çözümler - 1.
Gönderme olarak ad / kimliğe sahip başka bir öğeniz olmadığından emin olun.
2. İşlevi onClick = "return submitAction();"
3 olarak adlandırmayı deneyin .document.getElementById("form-name").submit();


-1

Deneyebilirsin

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

Aynı ada sahip birden fazla formunuz yok mu?


-1

GetElementById kullanın:

document.getElementById ('frmProduct').submit ()
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.