Mon formulaire ne supporte pas la méthode submit()

Messages postés
29
Date d'inscription
vendredi 10 octobre 2008
Statut
Membre
Dernière intervention
22 juin 2009
- - Dernière réponse : cs_ordiminnie
Messages postés
29
Date d'inscription
vendredi 10 octobre 2008
Statut
Membre
Dernière intervention
22 juin 2009
- 4 mars 2009 à 13:59
Bonjour,


J'ai un formulaire que je soumets à une fonction Check() via "onclick"
qui est sur un lien (et non sur un bouton submit > d'ailleurs, y'en
a pas du tout sur mon formulaire). Cette fonction vérifie quelques
input et insère des valeurs dans des input caché de ce même formulaire.
Puis il envoie ce formulaire.


Check() s'execute bien jusqu'au moment d'envoyer où j'ai la fameuse
erreur : JScript object doesn't support this property or method (je
travaille en asp.net mais j'ai utilisée un formulaire html classique)

Sur mozilla, la page est rechargée mais la function Check() n'est pas appelée.


Je n'ai pas donné une action à mon formulaire dans sa balise mais bien en javascript.

Est-ce que le fait que je n'ai pas de bouton "submit" dans mon formulaire puisse générer cette erreur ?
Un conflit avec ActiveX ?
Une idée ?

merci de votre aide !


Voilà mon code (épuré)


var sexe;

    function Check() {

        var sexeF = document.getElementById('f').checked;

        var sexeM = document.getElementById('m').checked;

        if (sexeF == true) {

            sexe = 'f';

        } else if (sexeM == true) {

            sexe = 'm';

        } else {

            sexe = 'unknown';

        }


        document.getElementById('sexe').value = sexe;

        myForm = document.getElementById('contactForm');

        myForm.action = '#';

        myForm.submit();


    }

Afficher la suite 

10 réponses

Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
bonjour,

ben déjà, 9999 sur 10000 un .submit n'est quasi jamais nécessaire
le bouton submit le fait tout seul
les contrôles, ici Check(), sont faits dans le on submit du formulaire

là, comme on n'a ni le formulaire, ni ce qui appelle la fonction
ça devrait baigner si tout l e rest est ok (?) ,
même si ce n'est pas la manière standard de faire

n'oublions pas que tu recharges la même page ( action="#" )
et peut-être des erreurs qu'on ne peut pas détecter ( id, name ... ) ?
va savoir

Cordialement[mon Site][M'écrire]Bul
Commenter la réponse de Bul3
Messages postés
29
Date d'inscription
vendredi 10 octobre 2008
Statut
Membre
Dernière intervention
22 juin 2009
0
Merci
Merci Bul3,

c'est vrai que ce n'est pas très orthodoxe ma façon de faire....
apparemment, ce serait mieux de laisser un button submit puis de mettre mon check() dans onSubmit() ?

je précise que je suis encore plus compliquée que ça en a l'air puisque comme tu l'as dit je renvoie ce formulaire avec ses nouvelles valeurs à la même page ...pour le traiter encore une fois en code behind (c#). Pourquoi est-ce que je ne fais pas tout en c# ? en fait je dois utiliser une fonction de hash dans mon Check() qui est déjà développé en javascript...

mais bon, je vais modifier mon code comme tu me l'as suggéré. Merci beaucoup de ton aide, jt complètement bloquée ! 

et voici la fin de mon code (épuré)
<form id="contactForm" action="" method="post" name="contactForm">
    <fieldset>
    <legend>CONTACT-US</legend>
       
            <MXP:DictionnaryControl Reference="H1Lab1" runat="server" ID="H1Lab1" />
            <MXP:DictionnaryControl Reference="H1Lab2" runat="server" ID="H1Lab2" />        
       

       

       
       
        <label>Nombre d'employe</label>

        <label>Date à laquelle le systeme doit être en place</label>
- -

        <label>Je veux une demo</label>

       
       

       

       

        [ <MXP:DictionnaryControl Reference="H1Lab17" runat="server" ID="H1Lab17" />]

    </fieldset>
</form>
Commenter la réponse de cs_ordiminnie
Messages postés
29
Date d'inscription
vendredi 10 octobre 2008
Statut
Membre
Dernière intervention
22 juin 2009
0
Merci
euh.....c'est où que je peux intercepter l'évènement onSubmit et le modifier?
Commenter la réponse de cs_ordiminnie
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
<form id= "contactForm" action="" method="get" name ="contactForm"
         onsubmit= "return(Check());" >
....
        
</form>

si la fonction Check retourne true, le formulaire sera envoyé,
si false : pas d'envoi
j'ai mis method ="get", car en javascript seul get est gérable

et il faudrait enlever

[
<MXP:DictionnaryControl Reference="H1Lab17" runat="server"
ID="H1Lab17" />]</

car en plus, comme c'est un lien, la page sera rechargée encore une fois !
ce qui fait beaucoup pour un seul formulaire.
Commenter la réponse de Bul3
Messages postés
29
Date d'inscription
vendredi 10 octobre 2008
Statut
Membre
Dernière intervention
22 juin 2009
0
Merci
Merci à toi bul3 ! J'étais passé sur un autre projet en urgence, mais je suis bien de retour...J'espère que tu ne m'as pas oublié entre temps.

J'ai bien appliqué tes conseils mais ça se complique.
comportement que je veux obtenir : En fait, une fois que mon formulaire est envoyé, la page est rechargée, les données sont à nouveaux traitées en code behind et un mail est envoyé. Si tout se passe bien, le mail est envoyé et la page n'affiche plus qu'un message de remerciement (et non plus le formulaire).

Comportement que j'ai après tes modifications : quand j'appuie sur send, check() est bien appelée, la page est rechargée, le mail envoyé et le messaage de remerciement s'affiche. Seulement, à partir de maintenant, quand je vais sur cette page, c'est toujours le message de remerciement et plus le formulaire. J'ai donc mis mon code behind dans un IsPostBack (variable d'asp.net qui stipule si on est dans un postback ou pas). Et maintenant, mon formulaire s'affiche mais quand j'appuie sur send, Check() n'est plus appelée....

Je n'ai pas d'idée...
C'est un vrai casse tête chinois !!

Au passage, j'ai vu sur ton site que tu pratiquais beaucoup JS, tu pourrais me conseiller un livre ? J'ai un oeil sur "Javascript: la référence" (avec un rhinocéros sur la couverture) qu'est-ce que t'en penses ?

Voici mon code JS:
script type="text/javascript" language="javascript">
    var sexeAnswer;
    function CheckForm() {
        alert('yo');
        var sexeF = document.getElementById('f').checked;
        var sexeM = document.getElementById('m').checked;
        if (sexeF == true) {
            sexeAnswer = 'f';
        } else if (sexeM == true) {
            sexeAnswer = 'm';
        } else {
            sexeAnswer = 'unknown';
        }

        var demoChecked = document.getElementById('CHdemo').checked;
        var cryptedCode = '';
        if (demoChecked) {
            var dateNow = new Date();
            var myDate = dateNow.getDate() + dateNow.getMonth() + dateNow.getFullYear();
            cryptedCode = calcMD5(myDate);
        }

        document.getElementById('demo').value = demoChecked;
        document.getElementById('code').value = cryptedCode;
        document.getElementById('sexe').value = sexeAnswer;
        return true;
    }

</script>

Mon formulaire
<form id="contactForm" action="#" method="get" name="contactForm" onsubmit="return(CheckForm());">
    <fieldset>
    <legend>CONTACT-US</legend>
       
           
<MXP:DictionnaryControl Reference="H1Lab1" runat="server"
ID="H1Lab1" />
            <MXP:DictionnaryControl Reference="H1Lab2"
runat="server" ID="H1Lab2" />        
       

       

       
       
       
<label>Nombre d'employe</label>

       
<label>Date à laquelle le systeme doit
être en place</label>
- -

        <label>Je veux une
demo</label>

       
       

       

       

       
        
       
    </fieldset>
</form>

Merci !
Commenter la réponse de cs_ordiminnie
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
>>Seulement, à partir de maintenant, quand je vais sur cette page,
>>c'est toujours le message de remerciement et plus le formulaire

pas compris... navré

de ce que je vois, tu as un formulaire
envoyé systématiquement si on clique sur le bouton <send>
( puique return true quoiqu'il arrive )
avec un message d'alerte : 'yo'
ce formulaire ne fait que recharger la même page ( action="#" )
Commenter la réponse de Bul3
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
>>tu pourrais me conseiller un livre ?
oulah... je n'ai de conseils à donner à personne moi !
>>"Javascript: la
référence" (avec un rhinocéros sur la couverture)
>>qu'est-ce que t'en
penses ?
aucune idée... jamais lu aucun bouquin sur javascript
ça se voit diront certains !
je me débrouille maladroitement avec des tutos ici et là,
une doc comme selfHTML ( gratis, téléchargeable, en français... )
et CodesSources essentiellement
Commenter la réponse de Bul3
Messages postés
29
Date d'inscription
vendredi 10 octobre 2008
Statut
Membre
Dernière intervention
22 juin 2009
0
Merci
>>aucune idée... jamais lu aucun bouquin sur javascript. ça se voit diront certains !
Ben moi je trouve que tu te débrouilles bien quand même ! Je vais finir par me dire que je suis vraiment nulle  !

Sinon, en ce qui concerne mon formulaire, tu l'as bien compris :
>> de ce que je vois, tu as un formulaire
envoyé systématiquement si on clique sur le bouton <send>
( puique return true quoiqu'il arrive )
avec un message d'alerte : 'yo'
ce formulaire ne fait que recharger la même page ( action="#" )

Dès que j'ai écrit et testé  ton code, le formulaire a eu ce comportement (nikel) mais depuis, quand ma page est chargée, le code behind (que tu ne vois pas) se déclenche directement, envoie un mail et cache le formulaire pour n'afficher que le message de remerciement. (or le code behind ne devrait se déclencher que si j'ai rempli et envoyé le formulaire). J'AI NEUTRALISE CE PROBLEME en mettant if (IsPostBack).
Maintenant : j'affiche la page avec le formulaire, je clique sur send, la page est rechargée maisChekForm() n'est pas appelé (pas d'alert('yo')). Comment ça se fait ? C'est ça mon problème...

Tiens, je te  mets le code behind (documenté) : (c'est en c#)
 protected void Page_Load(object sender, EventArgs e) //chargement de la page
    {
            // je cache les deux div de messages de remerciement
            divMsgSend.Visible = false;
            bool msgSend = false;

            divMsgSendDemo.Visible = false;
            bool msgSendDemo = false;
       
        if (IsPostBack) //ne doit se déclencher que si cette page est rechargée (pas la première fois)
        {
             //je teste si j'ai des variables en querystring (qui proviennent de l'envoie de mon formulaire)
            if (Request.ServerVariables["request_method"] == "GET")
            {
                 // je récupère les valeurs de mes variables
                string name = Request.Form["TBname"];
                string firstname = Request.Form["TBfirstname"];
                string function = Request.Form["TBfunction"];
                string compagny = Request.Form["TBcompagny"];
                string ligne1 = Request.Form["TBligne1"];
                string ligne2 = Request.Form["TBligne2"];
                string ligne3 = Request.Form["TBligne3"];
                string country = Request.Form["TBcountry"];
                string vat = Request.Form["TBvat"];
                string phone = Request.Form["TBphone"];
                string fax = Request.Form["TBfax"];
                string email = Request.Form["TBemail"];
                string nbr = Request.Form["TBnbr"];
                string expense = Request.Form["TBexpense"];
                string demo = Request.Form["demo"];
                string code = Request.Form["code"];
                string sexe = Request.Form["sexe"];

                string day = Request.Form["TBday"];
                string month = Request.Form["TBmonth"];
                string year = Request.Form["TByear"];

                string date = String.Format("{0}/{1}/{2}", day, month, year);

                string dataContact = "";
                dataContact += sexe;
                dataContact += name;
                dataContact += firstname;
                dataContact += function;
                dataContact += compagny;
                dataContact += ligne1;
                dataContact += ligne2;
                dataContact += ligne3;
                dataContact += country;
                dataContact += vat;
                dataContact += phone;
                dataContact += fax;
                dataContact += email;
                dataContact += "--------------------------------------------------------------";
                dataContact += nbr;
                dataContact += expense;
                dataContact += demo;
                dataContact += date;

                // j'envoie les données du formulaire dans un mail
                SmtpClient mySmtp = new SmtpClient("relay.skynet.be");
                mySmtp.Send("info@mobilexpense.com", "mm@mobilexpense.com", "INFORMATION REQUEST - MobileXpense WEB SITE", dataContact);
                msgSend = true;

                if (demo == "true") //si la personne a coche 'oui je veux une demo'
                {
                    string dataTransfered = "Thanks for your interest in MobileXpense. Follow this link (or copy/paste it in your browser) for watching our video : http://www.mobilexpense.com/en/Video.aspx Note :  this link is only avalaible today, until midnight.";
                    mySmtp.Send("info@mobilexpense.com", email, "Video Demonstration of MobileXpense", dataTransfered);
                    msgSendDemo = true;
                }

            }
            //j'affiche le message de remerciment approprié            if ((msgSend true) && (msgSendDemo false))
            {
                divMsgSend.Visible = true;
                divMsgSend.Style.Add("margin-bottom", "15px");
                contactFormWrapper.Visible = false;
            }            else if ((msgSend true) && (msgSendDemo true))
            {
                divMsgSendDemo.Visible = true;
                divMsgSendDemo.Style.Add("margin-bottom", "15px");
                contactFormWrapper.Visible = false;
            }
        }
    }

Merci beaucoup de ton attention et de ton aide, toute remarque est bonne à prendre !
J'espère que je suis plus claire cette fois.
Commenter la réponse de cs_ordiminnie
Messages postés
4934
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
7
0
Merci
>>c'est en c#
navré.. je connais très très mal ( pire que le js )
et trop peu pour être d'une aide quelconque

>>la page est rechargée maisChekForm() n'est pas appelé (pas d'alert('yo')).
euh...
si tu essayes uniquement avec le js et le html donné,
ça doit fonctionner ( à  chaque appui sur <send> )
ça fonctionne d'ailleurs chez moi ( ie, ff, ... )

maintenant avec les interactions du c# ??
peut-être creuser de ce coté ? ( sûrement ! )

@+
Commenter la réponse de Bul3
Messages postés
29
Date d'inscription
vendredi 10 octobre 2008
Statut
Membre
Dernière intervention
22 juin 2009
0
Merci
Merci quand même d'avoir été là. Je pense en effet que ça doit venir de l'interaction JS / c# mais je sais pas où chercher.

Allez, je crois qu'il est tant d'aller embêter mes collègues...

Je reviendrais donner la solution (mais oui je vais la trouver ! faut y croire !)

Merci
Commenter la réponse de cs_ordiminnie