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


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.


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


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ś".


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

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

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


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.


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>

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


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.


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

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


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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.