2009-05-07 11 views
194

Quelqu'un peut-il me dire ce qui ne va pas avec ce code? J'ai essayé de soumettre un formulaire avec JavaScript, mais une erreur ".submit n'est pas une fonction" affichée. Voir ci-dessous pour plus de détails du code:Erreur "Envoyer n'est pas une fonction" dans JavaScript

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

J'ai aussi essayé ceci:

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

Les deux me montrent la même erreur :(

+0

Quel navigateur vous donne ce message? Pouvez-vous poster la source complète? – harto

+0

Considérant que le code posté fonctionne pour moi dans IE7 et Chrome2, alors peut-être qu'il y a quelque chose de mal dans le code que vous n'avez pas posté? –

+9

Peut-être avez-vous un champ avec le nom ou l'id submit et ainsi .submit() est ombragé par ce champ? –

Répondre

527

soumettre n'est pas une fonction

signifie que vous avez nommé votre bouton soumettre ou un autre élément submit. Renommez le bouton en btnSubmit et votre appel fonctionnera comme par magie.

Lorsque vous nommez le bouton submit, vous remplacez la fonction submit() sur le formulaire.

+1

Vous venez de rencontrer ce problème avec selenium. "Submit" semble être le nom standard pour les boutons de soumission dans les connexions typo3 frontend.>. < – AaL

+34

Voici une astuce pratique. avec votre bouton d'envoi étant '# submit', vous pouvez le contourner en volant la méthode' submit() 'd'une autre instance, par exemple : 'document.createElement ('formulaire'). submit.call (document.frmProduct)'. –

+19

Semble tout le monde doit apprendre celui-ci à la dure. Serait une bonne question d'entrevue d'emploi – SeanDowney

8
<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: J'interverties les id environ

+0

document.getElementById ("frmProduct"). Submit n'est pas une fonction :( –

+1

Avez-vous plus d'un élément avec l'ID 'frmProduct'? – tvanfosson

+0

L'ajout de submitAction en tant que gestionnaire pour onsubmit et l'invocation de submit peut créer une infinité – tvanfosson

-1

Vous pouvez essayer

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

N'avez-vous pas plus d'un formulaire avec le même nom?

-1

Utilisation getElementById:

document.getElementById ('frmProduct').submit() 
4

J'ai rencontré le même problème lors de la création d'une application MVC avec des pages maîtres. Essayé de chercher l'élément avec «soumettre» comme les noms mentionnés ci-dessus, mais ce n'était pas le cas.

Pour mon cas, il a créé plusieurs tags sur ma page, donc il y avait des problèmes de référencement du formulaire correct.

Pour contourner cela, je vais laisser la poignée de bouton qui font l'objet à utiliser:

onclick="return SubmitForm(this.form)" 

et les js:

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

Se assurer qu'il n'y a pas une autre forme avec le même nom et assurez-vous qu'il n'y a pas de nom = "submit" ou id = "submit" dans le formulaire.

0

Ce que j'est

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

Tout simplement parce que tout le reste le travail didnt.

1

En donnant un élément de formulaire, un nom de soumettre omettra simplement la propriété submit. assurez-vous que vous n'avez pas un élément de formulaire avec le nom submit et vous devriez être en mesure d'accéder à la fonction de soumission très bien.

1

Si vous avez pas la possibilité de changer name="submit" vous pouvez également soumettre le formulaire de cette façon:

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

solution pour moi était de définir l'attribut « forme » de bouton

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

ou est js :

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

Ce sujet a déjà beaucoup de réponses, mais celui qui a le mieux fonctionné ! E plus simple - une ligne) pour moi était une modification du commentaire faite par Neil E. Pearson de 21 avril 2013:

Si vous êtes coincé avec le bouton soumettre étant #submit, vous pouvez la contourner en volant la méthode submit() d'une autre instance de formulaire.

Ma modification de sa méthode, et ce qui a fonctionné pour moi:

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

0

solutions possibles -
1.Assurez-vous que vous n'avez pas un autre élément avec le nom/id comme soumettre.
2.Try pour appeler la fonction comme onClick = "return submitAction();"
3. document.getElementById("form-name").submit();

Questions connexes