Page 1 sur 1

Imprimer un formulaire ?

Posté : 29 sept. 2006, 13:31
par artotal
bojour,
j'ai un formulaire à imprimer, mais l'ennui c'est que j'ai des bouton de type radio et checbox :
Donc au début j'ai fait sa:

Code : Tout sélectionner

<script LANGUAGE="JavaScript"> function popup() { w=open("",'popup','width=800,height=500,toolbar=no,scrollbars=yes,resizable=yes'); w.document.write("<body>"); w.document.write("<strong>Modifier Commercial : </strong>"+document.forms[0].elements["commercial_id"].value+"<br /><br />"); w.document.write("<strong>Sexe : </strong>"+document.forms[0].elements["sexe"].value+"<br /><br />"); w.document.write("<strong>Nom :</strong>"+document.forms[0].elements["nom"].value+"<br /><br />"); w.document.write("<strong>Prénom :</strong>"+document.forms[0].elements["prenom"].value+"<br /><br />"); w.document.write("<strong>Jour: </strong>"+document.forms[0].elements["dd"].value+"<br /><br />"); w.document.write("<strong>Mois: </strong>"+document.forms[0].elements["mm"].value+"<br /><br />"); w.document.write("<strong>Année: </strong>"+document.forms[0].elements["aaaa"].value+"<br /><br />"); w.document.write("<strong>Adresse: </strong>"+document.forms[0].elements["adressel1"].value+"<br /><br />"); w.document.write("<strong>(suite) : </strong>"+document.forms[0].elements["adressel2"].value+"<br /><br />"); w.document.write("<strong>Code postal : </strong>"+document.forms[0].elements["code_postal"].value+"<br /><br />"); w.document.write("<strong>Ville :</strong>"+document.forms[0].elements["ville"].value+"<br /><br />"); w.document.write("<strong>Pays :</strong>"+document.forms[0].elements["pays"].value+"<br /><br />"); w.document.write("<strong>Téléphone domicile :</strong>"+document.forms[0].elements["ville"].value+"<br /><br />"); w.document.write("<strong>Téléphone portable :</strong>"+document.forms[0].elements["site_web"].value+"<br /><br />"); w.document.write("<strong>Niveau d'étude :</strong>"+document.forms[0].elements["email"].value+"<br /><br />"); w.document.write("<strong>Type d'étude :</strong>"+document.forms[0].elements["contact"].value+"<br /><br />"); w.document.write("<strong>Compétences :</strong>"+document.forms[0].elements["telephone"].value+"<br /><br /></p>"); w.document.write("<strong>Email : </strong>"+document.forms[0].elements["vvvvvv"].value+"<br /><br /></p>"); w.document.write("<strong>Notes :</strong>"+document.forms[0].elements["vvvvvv"].value+"<br /><br /></p>"); w.document.write("<strong>PR&Eacute;PA MULTIMEDIA </strong>"+document.forms[0].elements["form_1"].value+"<br /><br /></p>"); w.document.write("<strong>PR&Eacute;PA INFORMATIQUE</strong>"+document.forms[0].elements["form_2"].value+"<br /><br /></p>"); w.document.write("<strong>GAMEDESIGNER</strong>"+document.forms[0].elements["form_3"].value+"<br /><br /></p>"); w.document.write("<strong>WEBDESIGNER</strong>"+document.forms[0].elements["form_4"].value+"<br /><br /></p>"); w.document.write("<strong>WEBMASTER</strong>"+document.forms[0].elements["form_5"].value+"<br /><br /></p>"); w.document.write("<strong>INFOGRAPHIE / MULTIM&Eacute;DIA</strong>"+document.forms[0].elements["form_6"].value+"<br /><br /></p>"); w.document.write("<strong>ADMINISTRATEUR SYSTEME ET R&Eacute;SEAUX</strong>"+document.forms[0].elements["form_7"].value+"<br /><br /></p>"); w.document.write("<strong>MONTAGE VIDEO</strong>"+document.forms[0].elements["form_8"].value+"<br /><br /></p>"); w.document.write("<strong>D&Eacute;VELOPPEUR</strong>"+document.forms[0].elements["form_9"].value+"<br /><br /></p>"); w.document.write("<strong>COMMUNICATION VISUELLE</strong>"+document.forms[0].elements["form_10"].value+"<br /><br /></p>"); w.document.write("<strong>ARCHITECTURE D'INT&Eacute;RIEUR</strong>"+document.forms[0].elements["form_11"].value+"<br /><br /></p>"); w.document.write("<strong>D&Eacute;CORATION / SCENE D'INT&Eacute;RIEUR</strong>"+document.forms[0].elements["form_12"].value+"<br /><br /></p>"); w.document.write("<strong>FLASH</strong>"+document.forms[0].elements["logiciel_1"].value+"<br /><br /></p>"); w.document.write("<strong>ILLUSTRATOR</strong>"+document.forms[0].elements["logiciel_2"].value+"<br /><br /></p>"); w.document.write("<strong>PHOTOSHOP</strong>"+document.forms[0].elements["logiciel_3"].value+"<br /><br /></p>"); w.document.write("<strong>DIRECTOR</strong>"+document.forms[0].elements["logiciel_4"].value+"<br /><br /></p>"); w.document.write("<strong>DREAMWEAVER</strong>"+document.forms[0].elements["logiciel_5"].value+"<br /><br /></p>"); w.document.write("<strong>FIREWORKS</strong>"+document.forms[0].elements["logiciel_6"].value+"<br /><br /></p>"); w.document.write("<strong>XPRESS</strong>"+document.forms[0].elements["logiciel_7"].value+"<br /><br /></p>"); w.document.write("<strong>PREMIERE</strong>"+document.forms[0].elements["logiciel_8"].value+"<br /><br /></p>"); w.document.write("<strong>AFTER EFFECTS</strong>"+document.forms[0].elements["logiciel_9"].value+"<br /><br /></p>"); w.document.write("<strong>3DSMAX</strong>"+document.forms[0].elements["logiciel_10"].value+"<br /><br /></p>"); w.document.write("<strong>IN DESIGN</strong>"+document.forms[0].elements["logiciel_11"].value+"<br /><br /></p>"); w.document.write("<strong>MAYA</strong>"+document.forms[0].elements["logiciel_12"].value+"<br /><br /></p>"); w.document.write("<strong>FINAL CUT</strong>"+document.forms[0].elements["logiciel_13"].value+"<br /><br /></p>"); w.document.write("<strong>COMBUSTION</strong>"+document.forms[0].elements["logiciel_14"].value+"<br /><br /></p>"); w.document.write("<strong>AUTRES :</strong>"+document.forms[0].elements["logiciel_autre"].value+"<br /><br /></p>"); w.document.write("<\/body>"); w.document.close(); w.print(); } </script>

et je n'ai mis que la moitiée.
En fait le sexe est undefinid, alors je ne sais pas qu'elle écriture mettre ?
Merci

Posté : 29 sept. 2006, 15:51
par Ryle
Lorsque plusieurs champs d'un formulaire ont le même nom, comme c'est le cas des boutons radio, javascript les interprete comme des tableaux. Il ne faut donc pas faire appel directement au .value, mais spécifier l'index du champ que tu veux interroger : document.formulaire.champ[0].value

une p'tite fonction simple pour récupérer la valeur du radio coché :

Code : Tout sélectionner

function getRadioValue(el) { if(!el) return null; // champ non trouvé if(!el.length && el.checked) // s'il n'y a qu'un seul bouton -> pas de tableau return el.value; // retourne sa valeur s'il est coché for(var i = 0; i < el.length; i++) // si plus d'un élément if(el[i].checked) return el[i].value; // retourne la valeur de l'élément coché return null; // dans les autres cas retourne null }

Posté : 29 sept. 2006, 21:02
par artotal
Par exemple pour le champs sexe sa se presente comme sa :
<tr>
<td>
Sexe : 
</td>
<td>
<input type=radio name="sexe" value="M"
<? if($row[54]=="M") echo "checked"; ?>>&nbsp;Homme&nbsp;
<input type=radio name="sexe" value="F"<? if($row[54]=="F") 
echo "checked"; ?>>&nbsp;Femme
</td>
</tr>
je doit donc mettre à Homme
name="sexe[0]";
et femme :
name="sexe[1]";
puis dans le document js :
if (sexe==0) 
{
document.write("Homme");
}
else
{
document.write("Femme");
}
Comme en php ?¿

Posté : 29 sept. 2006, 23:02
par Cyrano
J'aurais bien une suggestion, si tu te sens d'attaque pour envisager la question avec un style CSS et du JavaScript un poil plus avancé :

L'idée générale est fondée sur un gestionnaire d'évènement : au clic du choix du genre masculin ou féminin, tu pourrais appeler une fonction envoyant la valeur sélectionnée et ta fonction ferait un innerHTML : mais le truc consisterait à coupler ça avec deux feuilles de style.
- la première pour l'écran (media="screen" dans une balise <link>)
- la seconde pour l'impression (media="print" dans une balise <link>)

à partir de là, deux classes spécifiques : l'une, par exemple class="ecran" et l'autre class="impression" : Ton formulaire à l'écran affichera toujours les boutons radio, ils devront avoir la première classe, mais à l'impression, les boutons n'apparaîtront pas et ce sera par exemple un paragraphe <p></p> qui contiendra "homme" ou "femme" selon le choix. Ce paragraphe aura donc la classe CSS "print"

Dans ta feuille de style, tu aura pour celle destinée à l'écran :

Code : Tout sélectionner

.impression {display: none}
Et logiquement dans celle destinée à l'impression :

Code : Tout sélectionner

.ecran {display: none}
J'ai pas testé, mais je suis quasiment certain que ça peut fonctionner très bien :)

Posté : 30 sept. 2006, 00:05
par artotal
sa me fait beaucoups de boulôt en faisant sa, j'ai énormément de formulaire à faire, et d'une longueur incroyable, aucun se ressemble.
De plus le javascript j'ai du mal, je n'arrive même pas à intégrer la fonction de Ryle.
J'ai essayer divers truc, sans succès

Code : Tout sélectionner

w.document.write("<strong>Nom :</strong>"+document.forms[0].elements["nom"].getRadioValue(sexe)+"<br /><br />");
Mais j'essaie maintenant d'afficher tout le formulaire

Code : Tout sélectionner

w.document.write(document.forms[0]);
Sa par exemple sa m'affiche "OBJET"
Mais sans succès ?

Posté : 30 sept. 2006, 00:09
par Cyrano
As-tu essayé simplement print() ? (En JavaScript s'entend)

Posté : 30 sept. 2006, 00:34
par artotal
non pas essayer, mais par contre je vais revoir ma façon de faire.
Tout simplement

Code : Tout sélectionner

<input type="button" class="submit" value="Imprimer" onClick="window.print()" style='text-decoration:none' alt="Cliquez pour imprimer cette page" />
Mais je voudrai ouvrir le document courant dans une popup, mais comme c'est une page dynamique en php, je pense qu'il faudrai que je rapelle la page, je cherche comment faire sa !
Le popu sa sert d'aperçu en faite.

Posté : 30 sept. 2006, 03:18
par artotal
Merci pour vos réponse qui m'on aidé à creuser le sujet