Błąd „Prześlij nie jest funkcją” w JavaScript

263

Czy ktoś może mi powiedzieć, co dzieje się z tym kodem? Próbowałem przesłać formularz z JavaScript, ale pojawił się błąd „.submit nie jest funkcją”. Zobacz więcej szczegółów kodu:

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

Próbowałem także:

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

Oba pokazują mi ten sam błąd :(

Jin Yong
źródło
Która przeglądarka wyświetla tę wiadomość? Czy możesz opublikować pełne źródło?
harto
Biorąc pod uwagę, że opublikowany kod działa dla mnie zarówno w IE7, jak i Chrome2, to może jest coś nie tak z kodem, którego nie opublikowałeś?
Lasse V. Karlsen
11
Być może masz pole o nazwie lub id id, a zatem pole .submit () jest zasłonięte przez to pole?
Lasse V. Karlsen
ten błąd wystąpił, gdy masz ten sam id = "frmProduct" w różnych elementach.
Optimaz ID

Odpowiedzi:

735

Prześlij nie jest funkcją

oznacza, że ​​nazwałeś swój przycisk przesyłania lub jakiś inny element submit. Zmień nazwę przycisku na, btnSubmita połączenie zadziała w magiczny sposób.

Po nadaniu nazwy przyciskowi przesłania zastępujesz submit()funkcję w formularzu.

epascarello
źródło
55
Oto przydatna sztuczka. Jeśli utkniesz w przycisku przesyłania #submit, możesz go obejść, kradnąc submit()metodę instancji innej formy , np document.createElement('form').submit.call(document.frmProduct). : .
Neil E. Pearson
35
Wygląda na to, że każdy musi się tego nauczyć na własnej skórze.
Zrobiłoby
9
Po prostu usunąłem nazwę = „prześlij”, a Bob jest twoją ciocią, zadziałało !!
zzapper
2
Dziwię się, że nigdy na to nie wpadłem, ale niestety to był problem!
natebeaty
3
Właśnie zmarnowałem swoje 2-3 godziny na ten problem, wielkie dzięki za odpowiedź
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>

EDYCJA: Przypadkowo zamieniłem identyfikator

Chad Grant
źródło
document.getElementById ("frmProduct"). Prześlij nie jest funkcją :(
Jin Yong
1
Czy masz więcej niż jeden element o identyfikatorze „frmProduct”?
tvanfosson
Dodanie submAction jako procedury obsługi onsubmit, a następnie wywołanie z niego send może stworzyć nieskończoną pętlę. Program obsługi powinien być powiązany z kliknięciem przycisku.
tvanfosson
1
Zapisywanie dokładnych odpowiedzi, prawda? kulawe chłopaki, dajcie nam zdobyć punkty, za które sprzedajecie swoje dusze
Chad Grant
@Chad Grant - Nie można zgodzić się więcej.
Fenton,
10

Upewnij się, że nie ma innego formularza o tej samej nazwie i upewnij się, że w formularzu nie ma nazwy = "zgłoś" lub id = "zgłoś".

gopeca
źródło
9

Jeśli nie masz możliwości zmiany name="submit", możesz również przesłać formularz w ten sposób:

function submitForm(form) {
    var submitFormFunction = Object.getPrototypeOf(form).submit;
    submitFormFunction.call(form);
}
Terbiy
źródło
5
HTMLFormElement.prototype.submit.call(form)działa również
musa
5

Miałem ten sam problem podczas tworzenia aplikacji MVC przy użyciu stron wzorcowych. Próbowałem wyszukać element z „przesłaniem” jako nazwami, jak wspomniano powyżej, ale tak nie było.

W moim przypadku utworzyłem wiele tagów na mojej stronie, więc wystąpiły problemy z odniesieniem do prawidłowego formularza.

Aby obejść ten problem, pozwól przyciskowi obsłużyć, którego obiektu formularza użyć:

onclick="return SubmitForm(this.form)"

i z js:

function SubmitForm(frm) {
    frm.submit();
}
Quangah
źródło
3

Ten temat ma już wiele odpowiedzi, ale ta, która działała najlepiej (i najprostsza - jedna linia!) Była dla mnie modyfikacją komentarza Neila E. Pearsona z 21 kwietnia 2013 r .:

Jeśli utkniesz w przycisku # wysyłania, możesz obejść ten problem, wykradając metodę subm () innej instancji formularza.

Moja modyfikacja jego metody i co zadziałało dla mnie:

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

Jlemley
źródło
2

nadanie elementowi formy nazwy submission spowoduje proste przesłanie właściwości submission. upewnij się, że nie masz elementu formularza o nazwie „Prześlij” i powinieneś być w stanie dobrze uzyskać dostęp do funkcji przesyłania.

Ahmed Eid
źródło
2

W rzeczywistości rozwiązanie jest bardzo łatwe ...

Oryginalny:

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

Rozwiązanie:

    <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
źródło
Czy możesz wyjaśnić, w jaki sposób rozwiązuje to problem PO.
Kingsley,
Na pewno w tym przypadku (tylko w tym przypadku) problemem jest zakres.
Zurc Soirrab
1

Powinieneś użyć tego kodu:

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

AnilSengul
źródło
Ten fragment kodu może rozwiązać pytanie, ale wyjaśnienie naprawdę pomaga poprawić jakość posta. Pamiętaj, że w przyszłości odpowiadasz na pytanie dla czytelników, a ci ludzie mogą nie znać przyczyn Twojej sugestii kodu. Staraj się również nie tłoczyć kodu objaśniającymi komentarzami, co zmniejsza czytelność zarówno kodu, jak i objaśnień!
Filnor,
0

To, czego użyłem, to

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

Tylko dlatego, że wszystko inne nie działało.

compraspro.com
źródło
0

Rozwiązaniem było dla mnie ustawienie atrybutu „forma” przycisku

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

lub jest js:

YOURFORMOBJ.getElementsByTagName("button")[0].setAttribute("form", "form_id_name");
YOURFORMOBJ.submit();
ProtonIonNeutron
źródło
0

Możliwe rozwiązania -
1.Upewnij się, że nie masz żadnego innego elementu o nazwie / identyfikatorze podczas przesyłania.
2. Spróbuj wywołać funkcję jako onClick = "return submitAction();"
3.document.getElementById("form-name").submit();

Ram Thota
źródło
-1

Możesz spróbować

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

Nie masz więcej niż jednego formularza o tej samej nazwie?

Fabien Ménager
źródło
-1

Użyj getElementById:

document.getElementById ('frmProduct').submit ()
Ilya Birman
źródło