Novice JS : sos appel de fonction JS par fonction php

Résolu
M000004965 Messages postés 147 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 12 juin 2008 - 18 févr. 2008 à 13:58
M000004965 Messages postés 147 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 12 juin 2008 - 18 févr. 2008 à 16:36
Bonjour,

(je suis débutant en PHP et donc une vraie quiche en JS...)

voila, j'ai un formulaire avec des critères de filtres en plusieurs listes (pas de prblème)
j'ai le résultat issu des critères de filtres. Ce résultat est présenté dynamiquement sous forme de checkbox avec id.
et un bouton de commande appelé "Generer".

<script type="text/javascript">
<--

function Detail_Demande()
{
    Element_Liste1 =   [document.filtres.liste1.selectedIndex].value;
       with (document.Resultats)
       {
         for (u = 0; u < ChkResult.length; u++)
         if (ChkResult[u].checked = = true)
             {
                   Element_Chk = [document.Resultats.ChkResult.].value;
                   fusion = Element_Liste1+Element_Chk;
                   document.lstdemande.value = fusion;  comment je force un retour à la ligne dans ma zone de texte
             }
       }
}
-->
</script>

echo '<form method="post" name="Filtres" action="">';
          echo 'Liste1
<select name="liste1">';
            echo '<option id="0" value="-" selected>NC</option>';
            echo '<option id="1" value="prod">Choix1</option>';
            echo '<option id="2" value="Test">Choix2</option>';
            echo '<option id="3" value="Test">Choix3</option>';
            echo '<option id="4" value="Test">Choix4</option>';
          print "</select>

";
echo '</form>';

echo '<form method="post" name="Resultats" action="">';
echo '<INPUT TYPE="checkbox" NAME="ChkResult" id="1" value="toto1">';
echo '<INPUT TYPE="checkbox" NAME="ChkResult" id="2" value="toto2" checked>';
echo '<INPUT TYPE="checkbox" NAME="ChkResult" id="3" value="toto3">';
echo '<INPUT TYPE="checkbox" NAME="ChkResult" id="4" value="toto4" checked>';

echo '

';
echo '

echo '</form>';

// Zone de texte vérouillée pour afficher toutes les possibilités
// Soit : 4 entrées de la liste1 * n entrées chreckbox cochées
echo '<TEXTAREA NAME="lstdemande" ROWS="5" COLS="50" READONLY>';
echo '</TEXTAREA>

';

Comment je peux faire pour que ma fonction prenne toutes les entrées de la liste1 et les associent à toutes les entrées checkbox cochées et les écrire ligne par ligne dans ma zone de texte
Mon code ne fonctionne pas et je ne comprend pas pourquoi.

D'avance merci

Autodidact, je ne demande qu'à apprendre... Merci de votre aide

9 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
18 févr. 2008 à 15:36
onClick= "Detail_Demande(); return false; "
    sinon le formulaire est transmis ( ici à la même page )
        , et on ne voit pas ce qu'il y a dans le textarea puisque réffiché.
   
>>au cas où aucune checkbox ne serai cochée
    faire un test
    mais dans <form onsubmit ="return ( Detail_Demande());"...>
             et dans le bouton submit enlever le onclick
       si cette fonction retourn false, le formulaire n'est pas transmis.
                                           true   il l'est

>>il est toujours préférable de faire référence à un objet par son ID plutôt que par son NOM ?!
    euh... ben non.
    c'est en général plus simple pour répondre, c'est tout.
    avec le php, ne sont transmis que les value éléments qui ont un name
          alors pourquoi ajouter un id, dans ce cas ?
          perso je préfère nettement document.name_formulaire.name_élément
          ( avec IE, name_element suffirait mais avec FF, il faut tout lui dire )
          mais chacun ses goûts, et les vaches sont bien gardées.

>>pour le déclaratif des variables en JS
    s'il n'y a pas de var, ou un var hors des fonctions, ce sont des variables globales
    var dans une foncion : locales   et c'est plus mieux (?)

    for (u = 0; u < document.Resultats.ChkResult.length; u++)
       ça devrait le faire

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
3
M000004965 Messages postés 147 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 12 juin 2008
18 févr. 2008 à 16:36
La soluce complète avec tous mes remerciements à Bultez et à Codes-Sources

<script type="text/javascript">
function Detail_Demande()
{
var Element_Liste1;
var Element_Chk;
var fusion;

fusion = "";

    Element_Liste1 =  document.Filtres.liste1.options[document.Filtres.liste1.selectedIndex].value;
       with (document.Resultats)
       {
         for (u = 0; u < ChkResult.length; u++)
         {

           if (ChkResult[u].checked == true)
             {

                Element_Chk = document.Resultats.ChkResult[u].value;
                fusion = fusion + Element_Liste1 + " - " + Element_Chk + "\r\n";
                document.getElementById("lstdemande").value = fusion;

             }
           }
       }
}
</script>

<form method="post" name="Filtres" action="">
         Liste1

            <select name="liste1">
         <option id="0" value="-" selected>NC</option>
         <option id="1" value="Choix1">Choix1</option>
         <option id="2" value="Choix2">Choix2</option>
         <option id="3" value="Choix3">Choix3</option>
         <option id="4" value="Choix4">Choix4</option>
          </select>

</form>

<form name="Resultats" action="">

toto1
toto2
toto3
toto4

</form>

<TEXTAREA id="lstdemande" ROWS="5" COLS="50" READONLY>
</TEXTAREA>

Autodidact, je ne demande qu'à apprendre... Merci de votre aide
3
M000004965 Messages postés 147 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 12 juin 2008
18 févr. 2008 à 14:04
OUPSSS ! excusez,

le titre n'est plus vraiment en adéquation avec la question, mais comme je cherche en permanence, je change tout le temps pour essayer de solutionner....

désolé

Autodidact, je ne demande qu'à apprendre... Merci de votre aide
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
18 févr. 2008 à 14:17
Bonjour,

    franchement : à quoi sert le php ici ? ( où alors, c'est un extrait pour nous montrer )
          mais s'il n'y a pas de $variables... les echo 'html ou javascript' sont inutiles

    il y a plusieurs erreurs de syntaxe ( php et javascript )
    les voici corrigés ( pas toutes ! voir ma remarque en fin )
    il manque aussi var très souvent,
       ce qui fait qu'on utlise des variables globales... inutiles

<script type="text/javascript">
function Detail_Demande()
{
    Element_Liste1 =  document.Filtres.liste1.options[document.Filtres.liste1.selectedIndex].value;
       with (document.Resultats)
       {
         for (u = 0; u < ChkResult.length; u++)
         if (ChkResult[u].checked == true)
             {
                   Element_Chk = document.Resultats.ChkResult.value;
                   fusion = Element_Liste1 + Element_Chk;
                   document.getElementById("lstdemande").value = fusion;  //comment je force un retour à la ligne dans ma zone de texte
             }
       }
}
</script>

<form method="post" name="Filtres" action="">
         Liste1

            <select name="liste1">
         <option id="0" value="-" selected>NC</option>
         <option id="1" value="prod">Choix1</option>
         <option id="2" value="Test">Choix2</option>
         <option id="3" value="Test">Choix3</option>
         <option id="4" value="Test">Choix4</option>
          </select>

</form>

<form method="post" name="Resultats" action="">

</form>

// Zone de texte vérouillée pour afficher toutes les possibilités
// Soit : 4 entrées de la liste1 * n entrées chreckbox cochées
<TEXTAREA id="lstdemande" ROWS="5" COLS="50" READONLY>
</TEXTAREA>

                   Element_Chk = document.Resultats.ChkResult.value;
    certes... mais lequel ?   il y en a 4...

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
18 févr. 2008 à 14:20
les erreurs php sont signalées dans ce qu'il génère,
coté html/javascript :


¡————————¡——————————————————————————————————————————————————————————¡
|FireFox |regarder la "console d'erreurs" |
| | Outils / Console d'erreurs |
| | |
| | et mieux, télécharger FireBug |
¦————————¦——————————————————————————————————————————————————————————¦
|Internet|activer le deboggage : Outils/options Internet/Avancés |
|Explorer| dans la liste, sous "Navigation" : décocher |
| | ° Afficher une notification de chaque erreur de script |
| | ° Désactiver le débogage de Scripts (Internet Explorer) |
| | |
| | et mieux, télécharger le Debogger IE |
¦————————¦——————————————————————————————————————————————————————————¦
|K—Meleon|regarder la "console d'erreurs" |
| | Outils / Console d'erreurs |
¦————————¦——————————————————————————————————————————————————————————¦
|Opera |regarder la "console d'erreurs" |
| | utils / Asole d'erreurs |
¦————————¦——————————————————————————————————————————————————————————¦
|Safari |regarder Debug / Show JavaScript Console |
| | |
| |modif Fichier "Support:\Documents and Settings\utilisateur|
| |\Application Data\Apple Computer\Safari\Preferences.plist"|
| | y ajouter <key>IncludeDebugMenu</key> |
| | <true/> |
!————————!——————————————————————————————————————————————————————————!

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
18 févr. 2008 à 14:27
on fera d'autres remarques après...
du style     pourquoi with et ne pas utiliser ?
                 pourquoi onclick sur un bouton submit, alors que onsubmit sur le form est là pour ça ....
<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
M000004965 Messages postés 147 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 12 juin 2008
18 févr. 2008 à 15:04
wow !

merci bul, toujour fidel au post, en effet, ce script est pour exemple de situation.

Effectivement ! : Element_Chk = document.Resultats.ChkResult.value;
    certes... mais lequel ?   il y en a 4...

je corige avec :

Element_Chk = document.Resultats.ChkResult [u] .value;

j'essai et je te fait un retour, merci pour ton aide

laisse moi un peu de temps, il faut que je transpose vis à vis de mon vrai code.

pour le déclaratif des variables en JS , je me documente sur le sujet

pour quoi :
onClick ="Detail_Demande();return false;"
au cas où aucune checkbox ne serai cochée

J'en conclus, qu'en JS, il est toujours préférable de faire référence à un objet par son ID plutôt que par son NOM ?!

C'est presque good ! merci !!!

ci dessous le code:

<script type="text/javascript">
function Detail_Demande()
{
    Element_Liste1 =  document.Filtres.liste1.options[document.Filtres.liste1.selectedIndex].value;
       with (document.Resultats)
       {
         for (u = 1; u < ChkResult.length; u++)
         if (ChkResult[u].checked == true)
             {
                   Element_Chk = document.Resultats.ChkResult[u].value;
                   fusion = Element_Liste1 + " - " + Element_Chk;
                   document.getElementById("lstdemande").value = fusion;  //comment je force un retour à la ligne dans ma zone de texte
             }
       }
}
</script>

<form method="post" name="Filtres" action="">
         Liste1

            <select name="liste1">
         <option id="0" value="-" selected>NC</option>
         <option id="1" value="Choix1">Choix1</option>
         <option id="2" value="Choix2">Choix2</option>
         <option id="3" value="Choix3">Choix3</option>
         <option id="4" value="Choix4">Choix4</option>
          </select>

</form>

<form name="Resultats" action="">

toto1
toto2
toto3
toto4

</form>

<TEXTAREA id="lstdemande" ROWS="5" COLS="50" READONLY>
</TEXTAREA>

ça fonctionne sauf qu'il ne me met que la dernière checkbox cochée.

exemple si list1 = Choix2
et
checkbox cochée = 2 et 4

il n'écrit que Choix2 - toto4

alors que le résultat devrai être
Choix2 - toto2
Choix2 - toto4

c'est à dire deux ligne dans ma TEXTAREA id="lstdemande"

pour mon histoire de retour à la ligne dans la TEXTAREA , est-ce qu'un  /n   se serai bon ? (du genre:)

document.getElementById("lstdemande").value = fusion + "/n";   //comment je force un retour à la ligne dans ma zone de texte

j'était pas si loin de la vérité non

Autodidact, je ne demande qu'à apprendre... Merci de votre aide
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
18 févr. 2008 à 15:38
pas répondu à tout   :o(

document.getElementById("lstdemande").value = fusion + "\r\n"; 
    ( le \r ou le \n ? est utile uniquement pour IE.... je crois )

>>j'était pas si loin de la vérité non
    effectivement.

<hr />                Cordialement            Bul         [mon Site]     [M'écrire]
0
M000004965 Messages postés 147 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 12 juin 2008
18 févr. 2008 à 16:32
ok ok lol

j'en était un peu loin...

mais merci, j'ai apris pleins de choses !

il ne me reste plus qu'à trouver la solution du retour à la ligne dans ma zone de texte
Quand je rajoute /r/n il me le met dans le texte
que je fasse 1 seul (/n ou /r), que je les inverses ou que je soit sous IE ou FF, rien à faire il me les colles
j'ai :

Choix1 - toto2Choix1 - toto4/r/n

30 minutes plus tard ....

j'ai trouvé !!

                Element_Chk = document.Resultats.ChkResult[u].value;
                fusion = fusion + Element_Liste1 + " - " + Element_Chk + "\r\n" ;
                document.getElementById("lstdemande").value = fusion;

UN GRAND MERCI A BULTEZ !!!

Pour ceux qui serai intéressé à l'avenir je post la solution complète testée sous IE et FF

Autodidact, je ne demande qu'à apprendre... Merci de votre aide
0
Rejoignez-nous