Début en javascript [Résolu]

Signaler
Messages postés
23
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2009
-
Messages postés
23
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2009
-
Bonjour, je débute en javascript est je galère sur un ptit truc... Voilà, en gros j'ai un formulaire php qui génére une zone de champ en fonction d'un nombre saisie auparavant. Bon jusque là, rien de bien compliqué. Maintenant pour chacune de ces zones, je dois pouvoir rajouter 3 champs par simple clic sur un bouton. Donc avec mon niveau de débutant je suis aller pomper un code sur internet et essayé de l'adapter à mes besoins. Voilà ce que ca donne :

<hr size="2" width="100%" /><head>
    <script>
    function create_champ(n, i) {

    var n2 = n + 1;

    document.getElementById(i+n).innerHTML = "<label> N° bouteille : </label><label> Type bouteille : </label><select name='typeBouteille"+i+n+"' value='2' /><option value='0.4m3'> 0.4m3</option><option value='1m3'> 1m3</option><option value='3m3'> 3m3</option></select>";
    document.getElementById(i+"_"+n).innerHTML += (n < 10) ? '
[javascript:create_champ('+n2+', '+i+') Ajouter une bouteille du même lot]' : '';

    }
    </script>
</head>
<?php

if(isset($_POST['lot'])){

?>

    Veuillez entrer les informations suivantes :

<hr>
<form method="post" action="<?php $PHP_SELF ?>" class='formul'>
    <label> N° B.L. : </label>
    ' size="12" readonly />
   
    <label> Récéption le : </label>
    ' size="1" readonly />
    ' size="1" readonly />
    ' size="2" readonly />
    ' >
    <?php
    for($i=0; $i<$_POST['nbLot']; $i++){
        echo "<hr/>
        Lot ".($i+1)." :
        <label> Fabricant : </label>
       
        <label> N° de Lot : </label>
       
        <label> Expire le : </label>
        <select name='jourExpiration$i' value='2' />
            <option value='".date("d")."'>".date("d")."</option>";
        for($j=1; $j<=31; $j++) echo "<option value='$j'> $j </option>";
        echo "</select>
        <select name='moisExpiration$i' value='2' />
            <option value='".date("m")."'>".date("m")."</option>";
        for($j=1; $j<=12; $j++) echo "<option value='$j'> $j </option>";
        echo "</select>
        <select name='anneeExpiration$i' value='2' />";
        for($j=date("Y"); $j>=2002; $j--) echo "<option value='$j'> $j </option>";
        echo "</select>
     
 // Début de la zone à dupliquer
         <label> N° bouteille : </label>
       
        <label> Type bouteille : </label>
        <select name='typeBouteille$i1' value='2' />
            <option value='0.4m3'> 0.4m3</option>
            <option value='1m3'> 1m3</option>
            <option value='3m3'> 3m3</option>
        </select>
        Ajouter une bouteille du même lot
    //fin de la zone à dupliquer
        ";
    }
    ?>
<hr size="2" width="100%" />
Je ne sais pas si en javascript le fait de faire un int+int+string m'additionne mes deux int où me les transformes en chaine... dans le doute j'ai fais qques bidouilles mais marche toujours pas :(

15 réponses

Messages postés
23
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2009

Rectification (ca m'apprendra à poster trop vite -_-)
Les fonctions qui passent pas son :
<hr size="2" width="100%" />function testercodepostal (texte) {
    // Aide à la saisie : code postal
        var expression = /^[0-9]{0,5}$/g; // caractères autorisés
        if (!expression.test(texte.value)){
            //alert ("Ecrivez le code postal avec 5 chiffres ...");
            texte.value=texte.value.substring(0,texte.value.length-1);
        }
    }

   
    function testernom(texte){
    // Aide à la saisie : Nom ou prénom
    // Interdire des caratères non autorisés
        var a_str=texte.value;
        var expression = /^[àáâãäåòóôõöøèéêëçìíîïùúûüÿñoæa-z '-]+$/gi; // caractères autorisés
        if (!expression.test(texte.value)){
            // alert ("Ecrivez le nom sous la forme : Monté-Cristo ...");
            texte.value=texte.value.substring(0,texte.value.length-1);
            return false;
        }
        // 1er caractère doit être une majuscule
        expression = /^[àáâãäåòóôõöøèéêëçìíîïùúûüÿñoæa-z]{1}+$/g;
        a_str=texte.value;
        if (expression.test(texte.value)){
            // alert ("Le 1er caractère doit être une majuscule ...");
            a=texte.value.substring(0,1);
            texte.value=a_str.toUpperCase();
            return false;
        }
        // Interdire 2 caractères identiques de suite : ' -
        expression = /[-]{2}|[']{2}|[ ]{2}/g;
        a_str=texte.value;
        if (expression.test(texte.value)){
            // alert ("Evitez 2 blancs ou - ou '");
            texte.value=texte.value.substring(0,texte.value.length-1);
            return false;
        }
        // Interdire 2 majuscules de suite
        expression = /[A-Z]{1}[A-Z]{1}/g;
        a_str=texte.value;
        if (expression.test(texte.value)){
            // alert ("N'écrivez pas le nom en "tout majuscule"");
            a_str=texte.value.substring(texte.value.length-1,texte.value.length);
            texte.value=texte.value.substring(0,texte.value.length-1)+a_str.toLowerCase();
        }

    }
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
Bonjour,

comme tu nous fourni le php, on ne voit pas grand chose...
    qu'y a-t-il dans les $variable ?
    et ne pourrais-tu pas isoler ton problème ? faire plus court ?

    parce que moi, ça me rebute. ( je ne dois pas être le seul )


    puis   nous dire où sa plante, où est l'erreur...



>>Je ne sais pas si en javascript le fait de faire un int+int+string m'additionne
>>mes deux int où me les transformes en chaine...
    il suffit de regarder le résultat. alert par exemple

et aussi :

Avec |
|
et mieux :
télécharger
|

----

FireFox,
regarder la "console d'erreurs",
mon Site]     [M'écrire]<hr />
Messages postés
403
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
7 août 2020
1
Bonjour,

Lors de l'opération int+int+string, javascript te convertit le tout en chaîne. Si tu veux additionner les 2 int, il faut aller voir du côté de la fonction parseInt(). De même, il existe la fonction String(), qui te permet de convertir un contenu en chaîne de caractère.

Bonne prog.
Messages postés
23
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2009

En gros je veux dupliquer ca :
<hr size="2" width="100%" /> // Début de la zone à dupliquer
         <label> N° bouteille : </label>
       
        <label> Type bouteille : </label>
        <select name='typeBouteille$i1' value='2' />
            <option value='0.4m3'> 0.4m3</option>
            <option value='1m3'> 1m3</option>
            <option value='3m3'> 3m3</option>
        </select>
   
    [javascript:create_champ('+n2+', '+i+') Ajouter une bouteille
du même lot]' : '';

    }
    </script>
<hr size="2" width="100%" />la variable $i correspond à la zone à laquelle rajouter les champs. La variable n me sert à indicer les champs.
Messages postés
23
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2009

Erreurs renvoyé par firebug à chaque fois que je clic sur le lien pour ajouter un champ :
document.getElementById(i + n) has no properties
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
on ne sait pas ce que contient $i. si ?
un id et/ou un name devrait d'ailleurs commencer par une lettre.
et à mon humble avis, i + n comme id n'existe pas dans le html.
mais comme on ne l'a pas... un petit extrait du html, pas de php
<hr />


Cordialement            Bul     [mon Site]     [M'écrire]



<hr />
Messages postés
23
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2009

        Lot ".($i+1)." :
        <label> Fabricant : </label>
        
        <label> N° de Lot : </label>
        
        <label> Expire le : </label>
        <select name='jourExpiration$i' value='2' />
        .....
        <select name='moisExpiration$i' value='2' />
       .....
        <select name='anneeExpiration$i' value='2' />";
       ......
        <label> N° bouteille : </label>
        
        <label> Type bouteille : </label>
        <select name='typeBouteille$i1' value='2' />
            <option value='0.4m3'> 0.4m3</option>
            <option value='1m3'> 1m3</option>
            <option value='3m3'> 3m3</option>
        </select>
        Ajouter une bouteille du même lot
        ";
    }
Messages postés
23
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2009

C'est bon, j'ai trouvé. Il faut bien une lettre dans l'id. Maintenant ca marche, thx.
Messages postés
23
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2009

Bon en fait ca marche super bien... mais que sur Firefox... IE me dit qu'il y a une erreur et ne me cré pas les champs désiré -_-
Je redonne en parti mon code final qui marche sous firefox :
    <script>
    function create_champ(n, i){

    var n2 = n + 1;

    document.getElementById('c'+i+n).innerHTML = "<label> N° bouteille : </label><label> Type bouteille : </label><select name='typeBouteille"+i+n+"' value='2' /><option value='0.4m3'> 0.4m3</option><option value='1m3'> 1m3</option><option value='3m3'> 3m3</option></select>";
    document.getElementById('c'+i+n).innerHTML += (n < 10) ? '
[javascript:create_champ('+n2+', '+i+') Ajouter une bouteille du même lot]' : '';

    }
    </script>
<hr size="2" width="100%" />
        <label> N° de Lot : </label>
       
        <label> Expire le : </label>
        <select name='moisExpiration".($i+1)."' value='2' />
 ....
        <select name='anneeExpiration".($i+1)."' value='2' />";
....
        <label> N° bouteille : </label>
       
        <label> Type bouteille : </label>
        <select name='typeBouteille".($i+1)."1' value='2' />
            <option value='0.4m3'> 0.4m3</option>
            <option value='1m3'> 1m3</option>
            <option value='3m3'> 3m3</option>
        </select>
        Ajouter une bouteille du même lot
        ";
Messages postés
23
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2009

up
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
down :
un petit extrait du html, pas de php ( je me cite )



<hr />



Cordialement            Bul     [mon Site]     [M'écrire]



<hr />
Messages postés
23
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2009

Heu encore plus synthétique ? Plus synthétique que formulaire sans php mis à par pour les id, et le script... Enfin bon je vais essayer d'abréger encore :
<hr size="2" width="100%" /><script>
    function create_champ(n, i){

    var n2 = n + 1;

    document.getElementById('c'+i+n).innerHTML = "<label> N° bouteille : </label><label> Type bouteille : </label><select name='typeBouteille"+i+n+"' value='2' /><option value='0.4m3'> 0.4m3</option><option value='1m3'> 1m3</option><option value='3m3'> 3m3</option></select>";
    document.getElementById('c'+i+n).innerHTML += (n < 10) ? '
[javascript:create_champ('+n2+', '+i+') Ajouter une bouteille du même lot]' : '';

    }
    </script>
<hr size="2" width="100%" /><select name='typeBouteille".($i+1)."1' value='2' />
            <option value='0.4m3'> 0.4m3</option>
            <option value='1m3'> 1m3</option>
            <option value='3m3'> 3m3</option>
        </select>
        Ajouter une bouteille du même lot
<hr size="2" width="100%" />Voilà :-)
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
ben... tu fournis toujours le php ! pas la page générée !!!


...enfin.... supposons que $i vaille 0 ! faut que je fasse donc les modifs
dans le html !

    <script>
        function create_champ(n, i){
        var n2 = n + 1;
        document.getElementById('c'+i+n).innerHTML = "<label> N° bouteille : </label>"+
            ""+
            "<label> Type bouteille : </label>"+
            "<select name='typeBouteille"+i+n+"' value='2' />"+
            "<option value='0.4m3'> 0.4m3</option>"+
            "<option value='1m3'> 1m3"+
            "</option><option value='3m3'> 3m3</option>"+
            "</select>";
        document.getElementById('c'+i+n).innerHTML += (n < 10) ? '
[javascript:create_champ('+n2+', '+i+') Ajouter une bouteille du même lot]' : '';
        }
        </script>
    <select name='typeBouteille11' value='2' />
                <option value='0.4m3'> 0.4m3</option>
                <option value='1m3'> 1m3</option>
                <option value='3m3'> 3m3</option>
            </select>
            mon Site]     [M'écrire]</gras>



<hr />
Messages postés
23
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2009

Ca marche
Moué bon... Tout ça pour une simple histoire de balise... enfin bref merci
Par contre tant que je suis là, j'ai un autre souci
Pareil, problème de compatibilité sauf que cette fois c'est avec Firefox... IE m'execute correctement le code.
Voilà un extrait (sans php) :
<hr size="2" width="100%" /><script language="JavaScript">

    function testertelephone(texte) {
    // Aide à la saisie : numéro de téléphone
        var expression = /[^0-9 +()]+/gi;
        if (expression.test(texte.value)){
            //alert ("Ecrivez le numéro sous la forme 02 99 xx xx xx \n ou +33 (0) 2 99 xx xx xx");
            texte.value=texte.value.substring(0,texte.value.length-1);
            return false;
        }
        var expression=/[0-9]{3}/gi;
        if (expression.test(texte.value)){
            texte.value=texte.value.substring(0,texte.value.length-1)+" "+texte.value.substring(texte.value.length-1,texte.value.length);
        }
        if (texte.value.length>14){
            texte.value=texte.value.substring(0,14);
        }
    }

    function testercodepostal (texte) {
    // Aide à la saisie : code postal
        var expression = /^[0-9]{0,5}$/g; // caractères autorisés
        if (!expression.test(texte.value)){
            //alert ("Ecrivez le code postal avec 5 chiffres ...");
            texte.value=texte.value.substring(0,texte.value.length-1);
        }
    }

    </script>
<hr size="2" width="100%" />....
    <label> Code Postal&nbsp;: </label>
   
    <label> Téléphone Principal&nbsp;: </label>
   
.....
Mici d'encore m'aider
Et si tu avais une explication pour ma curiosité, de pourquoi une balide bloque en passant par du javascript alors que ca passe bien en html, je suis preneur
Messages postés
23
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
13 janvier 2009

Pour aider (j'ai retenu la leçon ) voilà l'erreur renvoyé par firebug :
<li>
invalid quantifier +$
    expression = /^[àáâãäåòóôõöøèéêëçìíîïùúûüÿñoæa-z]{1}+$/g;\n

</li><li>

testercodepostal is not defined

    onkeyup(keyup charCode=0, keyCode=8)

</li>