Insérer une fonction javascript dans un formulaire [Résolu]

Signaler
Messages postés
8
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
24 avril 2009
-
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
-
Bonjour à tous!

J'espère avoir posté dans le bon topic sinon veuillez m'en excuser.
Je viens à vous parceque cela fait 2 jours que je tente d'insérer une fonction javascript dans un formulaire afin de pouvoir me la mailer avec un script mail en php.
Je créer le site de ma boite et pour une section, nous utilisons un logiciel (PictBase) pour géolocaliser nos produits.
Ce logiciel créé des pages avec ifame, un truc vraiment dégueulasse, mais je ne peux malheureusement pas faire autrement que de m'en servir. Il a une fonction "fillValueRows" qu'il faut absolument que je récupère dans mon formulaire pour savoir de quelle page il s'agit. Cette fonction, en fonction du produit à afficher, génère des références, c'est cela qu'il faut que je récupère et que je mette dans un input (hidden).
Voici le code:

<HTML>
<HEAD>
    <TITLE>Document sans titre</TITLE>
    <META http-equiv= Content-Type content="text/html; charset=iso-8859-1">
    <LINK href="./icons/css.css" type=text/css rel=stylesheet>

    <script language="JavaScript" type="text/JavaScript" src="scripts/model.js"></script>
    <script language="JavaScript" type="text/JavaScript" src="scripts/runtime.js"></script>
    <script language=JavaScript type="text/JavaScript">
    <!--
    var dataWindow = window.parent; // cardFrameset
    var cardList = dataWindow.cardList;
    var paramMap = dataWindow.paramMap;
    var allRecords = dataWindow.allRecords;
    var id = paramMap.id;
    var lid = paramMap.lid;
    var border = paramMap.border;

    var nbDocField = params.nbDocumentField;
    var nbDocFolderField = params.nbDocFolderField;

    var record = allRecords[id];
    var title     = record["$TITLE"];
   
    var odd = true;

    // Title of window
    dataWindow.document.title = title;

    // -------------- Functions
    function onLoad()
    {
        if ( border != 1 )
            document.body.className='body2';
    }

    function openImage(index)
    {
        dataWindow.frames.mainFrame.location.href = "image.html";
        dataWindow.paramMap.t = "i";
        dataWindow.paramMap.index = String(index);
        return false;
    }

    function fillDocumentRows()
    {
        for(var ind=0;ind<nbDocField;ind++)
        {
            var suffix = "doc" + ind + "_";
            var recordSuffix = "$" + suffix;

            var docFieldName =  params[suffix + "Field"];

            var docName = columnLabels[docFieldName];            if ( (docName null) || (typeof docName 'undefined') )
                docName = "";

            var idDoc = record[recordSuffix + "ID"];
            var docPath = record[recordSuffix + "PATH_DOC"];

            var html = "";

            html += '<TD width="500px" valign="middle" height="180" align=left border=3 cellSpacing=1 cellPadding=2>\n';
            html += '\n';
            html += '\n';
            html += '----
\n';
            html += '\n';
            html += '<TABLE cellSpacing=0 cellPadding=0 width=161 border=0 valign=center>\n';
            html += '\n';
            html += '----
\n';
            html += ', \n';
            html += '
';
            html += docName;
            html += '
</TD>\n';
            html += '
\n';

            html += '\n';
            html += '\n';
            html += '----
\n';
            html += '\n';
            if(idDoc == 0)
                var srcPath = "./ImgPw/PwNoFile.jpg";
            else
                var srcPath = "./ImgPw/pw_" + idDoc + ".jpg";
           
            var pwWidth = record[recordSuffix + "PWW"];
            var pwHeight = record[recordSuffix + "PWH"];

            var tagImg = '';

            if((idDoc != 0) && isSelectedOption("LinkToImage"))
                html +=    '' + tagImg + '';
            else
                html +=    tagImg;

            html += ', \n';
            html += '
\n';

            html += '\n';
            html += '\n';
            html += '----
\n';
            html += '\n';
            if((idDoc != 0) && isSelectedOption("LinkToImage"))
            {
                html += '';
                html += '';
            }
            html += ', \n';
            html += '\n';
            if(isSelectedOption("CopyDocument") && (docPath.length > 0) )
            {   
                html += '&nbsp&nbsp&nbsp;&nbsp;'
                html += '';
                html += 'voir l\'original';
                html += '';
            }
            html += ', \n';
            html += '
\n';

            html += '</TD>\n';
            html += '</TR></TBODY></TABLE>\n';
            html += '</TD>\n';

            if (ind<nbDocField-1)
                html += '\n';

            document.write(html);
        }
    }

    function fillValueRows()
    {
        var html = "";
        for(var name in record) {
            var label = columnLabels[name];
            var type = columnTypes[name];

            if(label == null) continue;
            if(name == "$LocSupport") continue;
            if(name == "$GoogleSupport") continue;
            if(type == "document") continue;
            if(type == "docFolder") continue;

            var className = odd ? "couleur3" : "couleur4";
   
            html += '<TR class=' + className + ' vAlign=top>\n';
            html += '<TD class=texte noWrap align=left width=0>\n';
            html += ' ' + label + ' \n';
            html + = '</TD>';
            html += '<TD align=left width="100%">';
            html += record[name];
            html += '</TD>';
            html += '</TR>';
            html += '<TR vAlign=top><TD class=couleur1 noWrap align=left colSpan=2></TD></TR>';
            odd = !odd;
           
        }
        document.write(html);
    }

    function fillLocSupportRow()
    {
        var name = "$LocSupport";
        var label= columnLabels[name];

        // Label is defined only if we want data about localization
        if(typeof label == 'undefined')    return false;
        label = "Localisation";

        // Treatment of localization support
        var titleLS = record[name];
        var pathLS = record[name  + "_PATH"];        if(typeof titleLS 'undefined') titleLS "";        if(typeof pathLS 'undefined')  pathLS "";

        var className = odd ? "couleur3" : "couleur4";
        var html = "";
        var htmlLoc = "";

        if (pathLS.length > 0)
        {
            htmlLoc = '\n';
            htmlLoc += '\n';
            htmlLoc += '----
\n';
            htmlLoc += '\n';

            htmlLoc += '<TABLE cellSpacing=0 cellPadding=0 width=156 border=0>\n';
            htmlLoc += '\n';
            htmlLoc += '----
\n';
            htmlLoc += ', \n';

            var pwWidth = record[name  + \"_WIDTH\"];;
            var pwHeight = record[name  + \"_HEIGHT\"];;

            htmlLoc += '';
            htmlLoc += '</TD>
\n';

            htmlLoc += '\n';
            htmlLoc += '\n';
            htmlLoc += '----
\n';
            htmlLoc += '\n';
            htmlLoc += titleLS;
            htmlLoc += '
\n';

            htmlLoc += '</TD></TR></TBODY></TABLE>\n';
        }
        else
            htmlLoc = 'Fiche non localisée';

        html += '\n';
        html += '\n';
        html += '----
\n';
        html += '\n';
        html += '<table width="100%" border=0 cellpadding="1" cellspacing="0" class="texte">\n';
        html += '----
\n';
        html += ', ';
        html += ' ' + label + ' ';
        html + = '</td>\n';
        html += '----
\n';
        html += '\n';
        html += htmlLoc;
        html += '
\n';

        html += '</td></tr></table>\n';

        odd = !odd;
        document.write(html);
    }

    function fillDocFolderRows()
    {
        var html = "";

        for(var ind=0;ind<nbDocFolderField;ind++)
        {
            var suffix = "docFolder" + ind + "_";
            var recordSuffix = "$" + suffix;

            var fieldName =  params[suffix + "Field"];
            var name = columnLabels[fieldName];
            var descr = record[recordSuffix + "DESCR"];
            if(typeof name 'undefined') name "";            if(typeof descr 'undefined')    descr "";

            var data = descr.split(",");

            var className = odd ? "couleur3" : "couleur4";

            html += '\n';
            html += '\n';
            html += '----
\n';
            html += '\n';
            html += '<table width="100%" border=0 cellpadding="1" cellspacing="0" class="texte">\n';
            html += '----
\n';
            html += ', ';
            html += ' ' + GetHtmlStr(name) + ' ';
            html + = '</td>\n';
            html += '\n';
            html += '----
\n';
            html += '\n';
           
            for (var indData=0; indData<data.length-1; indData += 2 )
            {
                var dataName = data[indData];
                var dataPath = data[indData+1];
               
                html += '';
                html += ' ';
                html += GetHtmlStr(dataName);
                html += '
\n';
            }

            html += '
\n';
            html += '</td></tr></table>\n';

            odd = !odd;
        }
        document.write(html);
    }

    function printDocument()
    {
        window.print();
    }
    dataWindow.printDocument = printDocument;
    // -------------------------
    //]]>
    //-->
    </script>

<META content="MSHTML 6.00.2800.1458" name=GENERATOR>
<style type="text/css">
 #content
    {
     position:absolute;
     left:0;
     top:0;
     width:100%;
     height:100%;
    }
   
#form
{
    margin: 0 auto;
    text-align:center;
}

#fixe
{
    position: fixed;
    margin: 0 auto;
    width: 100%;
    height: 100%;
  }
               

a:link {
    color: #00376D;
}
a:visited {
    color: #00376D;
}
a:hover {
    color: #00376D;
}
a:active {
    color: #00376D;
}
</style>
<script language="javascript" type="text/javascript">
function validation()
{
        if(document.formulaire.nom.value == "")
        {
        alert ('Veuillez entrer votre Nom, svp.');
        document.formulaire.nom.focus();
        return false;
        }
        if(document.formulaire.telephone.value.length != 14){
        alert ('Le n° de téléphone doit comporter 10 chiffres et apparaître sous la forme "01.34.19.76.77"');
        document.formulaire.telephone.focus();
        return false;
        }
         var mail = document.formulaire.mail.value;
        if (mail.search(/^[_a-z0-9-]+(.[_a-z0-9-]+)*[^._-]@[a-z0-9-]+(.[a-z0-9]{2,4})*$/) == -1)
        {
            alert ('Veuillez entrez une adresse Email valide , svp.');
            document.formulaire.mail.focus();
            return false;
        }
                 
else {return true;}
}
</script>

</HEAD>

      <TABLE class=texte cellSpacing=0 cellPadding=0 width="100%" border=0 style="margin-left:50px; margin-right:50px;">
       
        ----

         ,
            <TABLE cellSpacing=1 cellPadding=5 width=150 align=middle border=0>
             
              ----

                                  <TABLE class=texte cellSpacing=0 cellPadding=1 border=0 >
                   
                    ----

                     , Référence : </TD>
                      <script language =JavaScript type=text/JavaScript>
<!--
    document.write(id);
//-->
</script>
                     ,
                   
                   
                 

                </TD>
              </TR>
              </TBODY>
            </TABLE>
<script language=JavaScript type=text/JavaScript>
<!--
    document.write( htmlTitle );
//-->
</script>
          </TD>
        </TR>
        <TR vAlign=top>
          <TD class=couleur3 align=left colSpan=2></TD>
        </TR>
<script language=JavaScript type=text/JavaScript>
<!--
    fillValueRows(ok);
//-->
</script>
<TR vAlign=top>
          <TD class=couleur3 align=left colSpan=2></TD>
        </TR>
                ----

<script language=JavaScript type=text/JavaScript>
<!--
    fillDocumentRows();
// -->
</script>

Si cette face vous intéresse, n'hésitez pas à nous contacter:
    <form id=\"formulaire\" name=\"formulaire\" enctype=\"multipart/form-data\" method=\"post\" action=\"http://www.vediaud.fr/face.php\" onSubmit=\"return validation();\" style=\"vertical-align:middle; text-align:center;\"/>
  <label for=\"civilite\"></label>
      <select name=\"civilite\" id=\"civilite\">
        <option>Mr</option>
        <option>Mme</option>
        <option>Mlle</option>
      </select>&nbsp;
    <label for=\"nom\"></label>
   
    Votre N° de téléphone :
    <label for=\"tel\"></label>
 
 

  Votre e-mail :
    <label for=\"mail\"></label>
   
 

<script>
document.write('');
</script>
 
    <label for=\"envoyer\"></label>
   
 

</form>
    </form>

   

        </TBODY>
         </TABLE>
<script language=JavaScript type=text/JavaScript>
<!--
    fillLocSupportRow();
    fillDocFolderRows();
//-->
</script>
  </TD>
  </TR>
</TBODY>

</TABLE>

</HTML>

La page est unique et les référence sont ensuite générée par un fichier ".js".
Si une bonne âme passait par là et me résolvé ce problème, ça serait un bonheur!!!
Merci d'avance.

13 réponses

Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
8
tu as bien raison, ça ne peut pas fonctionner ainsi.

il faut le faire en javascript, lorsque que tu en as besoin
<script....>
document.le name de ton formulaire.info.value=window.parent.frames['cardframeset'].fillvaluerows();
....
</script>

>>le javascript, c'est pas mon fort!
ce n'est pas une tare, mais si tu fais un site et que tu
veux utiliser, il va bien falloir que tu t'y mettes !
( quoique, le javascript n'étant jamais obligatoire.... )
@+
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
8
>>c'est 'undefined'..
reste à savoir qui !

alert(window.parent.frames['mainFrame']);
alert(window.parent.frames['mainFrame'].fillValueRows());
alert(document.formulaire);
alert(document.formulaire.info);

tu verras ....
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
8
Bonjour,
>>Ce logiciel créé des pages avec ifame, un truc vraiment dégueulasse,

ah bon ?
c'est le logiciel qui est dégueulasse ?
parce que les iframe, ça fonctionne nickel, sur tous les navigateurs,
         ça peut-être drôlement pratique, c'est simple à utiliser,
         parfois on ne peut qu'utiliser un iframe ( saisie wysiwig par exemple ),....
         bref, je ne vois pas ce qu'on pourrait reprocher à un iframe....

>>mais je ne peux malheureusement pas faire autrement que de m'en servir.

comme aucun inconvénient, c'est pas un drame

>>Il a une fonction "fillValueRows" qu'il faut absolument que je récupère

>>dans mon formulaire
euh ???? récupérer une fonction ? dans un formulaire ?
tu ne voudrais pas plutôt récupérer la réponse de cette fonction ?
si oui : window.parent.frames['name iframe'].toute l'iframe est disponible
               ( y compris les fonctions )
Cordialement [mon Site] [M'écrire] Bul
Messages postés
8
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
24 avril 2009

Bonjour Bul3 et merci beaucoup pour ta réponse.
Ce n'est malheureusement pas ce que je cherche. La réponse de ma fonction s'affiche parfaitement dans ma frame, pas de problème sur ce point mais afin de pouvoir obtenir la référence de mon produit, je dois récupérer la réponse de cette fonction dans un champ de formulaire hidden pour ensuite pouvoir me l'envoyer par mail via php. Sans cela, je ne peux savoir sur quel produit le client porte son intérêt. Un truc du style:


<script>
document.write('');
</script>

mais je n'arrive pas à trouver la syntaxe me permettant de faire cela.
Peut-être y'aurai t'il une méthode plus simple du style un screen de la page en question à envoyer en piece jointe avec mon formulaire. Je ne sais pas si c'est possible.

Cordialement.
Messages postés
8
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
24 avril 2009

une dernière chose si cela peut vous aider : un exemple de cette fameuse page:

http://www.vediaud.fr/exemple
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
8
>>je dois récupérer la réponse de cette fonction dans un champ de formulaire hidden
ben... c'est ce n'est pas que je disais  ??? je me cite :
tu ne voudrais pas plutôt récupérer la réponse de cette fonction ?
si oui : window.parent.frames['name iframe'].tout de l'iframe est disponible
donc.... ton champ.value= window.parent.frames[' ton name iframe '].ta fonction();
ou si la réponse de cette fonction est déjà dans stockée l'iframe :
ton champ.value =window.parent.frames['ton name iframe'].ta réponse à la fonction.value;

et document.write est à éviter absolument. si la page est totalement
interprétée, ce qui doit être la cas ici lors de ce document.write, ça
va commencer par effacer toute la page, y compris le javascript.
Messages postés
8
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
24 avril 2009

Merci beaucoup de t'intéresser à mon problème, c'est vraiment sympa.
Je vais passé pour un idiot mais je ne comprend pas comment mettre en application ta solution. J'ai fait



mais forcément, la valeur du champs ne peut-être que du texte en l'occurence :
window.parent.frames['cardframeset'].fillvaluerows();

Tu l'auras remarqué, le javascript, c'est pas mon fort! Je ne sais pas comment rédiger ca. Si j'osais, je te demanderais de m'écrire une petite fraction de code créant un champ hidden avec comme frame: cardframeset et la fonction fill valuerows. Merci beaucoup.
Messages postés
8
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
24 avril 2009

merci mille fois, je testerais ca demain au boulot mais effectivement la syntaxe me parait parfaite!
J'utilise le javascript seulement pour cette page puisque le logiciel d'export m'y oblige sinon je m'en serais bien passé!
Merci encore pour ton aide précieuse!!!
Messages postés
8
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
24 avril 2009

Bonjour,
encore une journée à essayer mais sans résultat!
Le code que tu m'as donné ne me créer pas de champ...
Le mieux que j'ai réussi à faire c'est d'afficher deux fois sur la page la réponse à ma fonction... Forcément il m'est impossible de récupérer ca dans mon script php.
Lueur d'espoir, j'ai créé un input avec comme nom "info" (le même que dans mon script js) et là, dans ce champ s'affiche undefined. Peut-être le début d'une solution?
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
8
>>Le code que tu m'as donné ne me créer pas de champ...
ben non....
il met le résultat de la fonction dans "document.le name de ton formulaire.info"
rien de plus... que ce que tu avais demandé
encore faut-il mettre les bons name, partout, pour tout
document.le name de ton formulaire.info.value =
      window.parent.frames['cardframeset'].fillvaluerows();

encore faut-il que cette fonction renivoie bien ce qu'il faut !
essaye donc alert(fillvaluerows()) et dans ton [I]frame pour
être sûr et dans la page pour tester.... et dis nous
@+
Messages postés
8
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
24 avril 2009

C'est la bonne fonction et elle marche sans problème.
>>>il met le résultat de la fonction dans "document.le name de ton formulaire.info"

après recherche sur internet c'est bien ce que j'avais compris, donc j'ai créé un input dans mon formulaire du style



et dans le head j'ai créé une nouvelle fonction histoire que ce soit propre du style

<script>
function reference()
{
document.formulaire.info.value=window.parent.frames['mainFrame'].fillValueRows();

}
</script>

Au passage, je mettais trompé de frame, mais c'est corrigé.
Et donc quand je teste ma page, la seule chose qui s'affiche dans mon champs c'est 'undefined'...
Messages postés
8
Date d'inscription
vendredi 14 décembre 2007
Statut
Membre
Dernière intervention
24 avril 2009

Bonjour,
grâce à la fonction alert j'ai pu tester toute une ribambelle de fonction.
Bizarrement, la fonction fillValueRows ne mettait constament undefined alors qu'elle est active dans ma page.
J'ai donc cherché une autre fonction qui pourrait me servir. La fonction title dans un script js attaché m'a paru pas trop mal et en la reconfigurant un peu, j'obtiens maintenant la référence de mon produit.
Si ca peut servir à d'autre même si c'est un cas un peu unique j'ai fait:

<script>document.formulaire.info.value=window.parent.frames['mainFrame'].title;</script>

dans mon formulaire et la magie a opéré.

Bul3, merci beaucoup pour tes conseils avisés et ta patience, grâce à toi je vais pouvoir passé un week end relax!!!! T'es un champion champion!!!!!!!!
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
8
je n'ai fait que t'aiguiller ... tu as trouvé seul !
et j'en suis heureux ! c'est dans des cas comme ça
    où ça me convient le mieux d'intervenir.
donner la solution, ça ne sert pas à grand chose,
        aider à résoudre c'est bien plus satisfaisant,
        pour tous, et surtout pour celui qui pose la question.
<humour> d'autant plus qu'ici, tu était le seul à pouvoir
             résoudre avec ce dont on disposait ;o))  </humour>
<hr size="2" width="100%" />il y a les optimistes, ceux qui voient le verre à moitié plein,
les pessimistes, ceux qui le voient à moitié vide,
et les mecs simples : ceux qui le boivent.
( je suis un primaire )
<hr size="2" width="100%" />