IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

formulaire dynamique un chouilla complex


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 5
    Par défaut formulaire dynamique un chouilla complex
    bon voila, je suis entrain de dvp un moteur de recherche sur une base de donnee de personnel. et donc j ai besoin de mettre en place un systeme de formulaire afin que l administration puisse faire bien leur travail en faisant de jolie requete.

    donc voila pour une ligne j utilise un petit script qui permet d'afficher les valeurs qui vont avec la recherche souhaite.

    var valeurs = new Array();
    valeurs[0] = new Array();
    valeurs[1] = new Array("dr.", "mr.", "prof.","ms.","eng.");
    valeurs[2] = new Array("1", "2", "3","5","6","9","13","15");


    function verifChoixValue_0()
    { if (document.formul.choixType_0.value == "0"){ alert('Vous devez tout d\'abord choisir un type de recherche!'); document.formul.choixType_0.focus(); } }

    function remplirValeurs_0(code)
    {
    var lesValeurs = valeurs[code];
    if (code>0){
    document.formul.choixValue_0.options.length = lesValeurs.length;
    for (i=0; i<lesValeurs.length; i++){ document.formul.choixValue_0.options[i].value = lesValeurs[i]; document.formul.choixValue_0.options[i].text = lesValeurs[i]; }
    document.formul.choixValue_0.options.selectedIndex = 0;
    }else{ document.formul.choixValue_0.options.length = 1; document.formul.choixValue_0.options[0].value = 0; document.formul.choixValue_0.options[0].text = "-- choisissez une valeur"; }
    }
    bon ca marche tres bien pour une ligne.
    Par la suite une personne peut avoir besoin de specifier plusieurs champ ainsi j ai utiliser un autre bou de script qui permet lui d ajouter et de suprimer des ligne avec appendchild et removechild

    /* initialise le script */
    function dtableInit() {
    var table = document.getElementsByTagName('TABLE');
    for ( var i = 0; i < table.length; i++ ) {
    // on récupère tous les tableaux dynamiques
    if ( table[i].className == 'dTable' ) {

    var tbody = table[i].tBodies[0];
    var newTr = tbody.rows[0].cloneNode(true);

    // on masque la première ligne du tbody (la ligne de reference)
    tbody.rows[0].style.visibility = "hidden";

    // on en ajoute une
    tbody.appendChild(newTr);
    }
    }
    }

    /* trouve le tag "parentTagName" parent de "element" */
    function getParent(element, parentTagName) {
    if ( ! element )return null;
    else if ( element.nodeType == 1 && element.tagName.toLowerCase() == parentTagName.toLowerCase() )return element;
    else return getParent(element.parentNode, parentTagName);
    }
    /* ajoute une ligne */
    function addLigne(link) {
    // 1. récuperer le node "TABLE" à manipuler
    var td = link.parentNode;
    var table = getParent(td,'TABLE');

    // 2. on va manipuler le TBODY
    var tbody = table.tBodies[0];

    // 3. on clone la ligne de reference
    var newTr = tbody.rows[0].cloneNode(true);
    tbody.appendChild(newTr);

    if ( document.all )
    newTr.style.visibility = "visible"; // pour IE
    else
    newTr.style.visibility = "visible"; // pour Gecko

    //on incremente le compteur de ligne
    MaVariable++;
    }
    /* supprimer une ligne */
    function delLigne(link) {
    // 1. récuperer le node "TABLE" à manipuler
    var td = link.parentNode;
    var table = getParent(td, 'TABLE');

    // 2. récuperer le TBODY
    var tbody = table.tBodies[0];

    // 3. Supprimer le TR
    tbody.removeChild(getParent(td, 'TR'));
    }
    Voila donc ca aussi ca marche. Mais (ouai je fairai pas un post aussi gros si y avai pas de mais), effectivement ca m ajoute des lignes mais je ne voi pas vraiment comment assigner le 1 er script au ligne rajouter dans le second.


    P.S. j a oublier de filer le code html
    <tr>
    <td>
    <input type="radio" name="chx_0" value="OR" checked />OR
    <input type="radio" name="chx_0" value="AND" />AND
    <input type="radio" name="chx_0" value="NOT" />Not
    </td>
    <td>
    <select name="choixType_0" onChange="remplirValeurs_0(this.options[this.selectedIndex].value);">
    <option value="0" selected>-- choisissez un type de recherche</option>
    <option value="1">Title</option>
    <option value="2">Activitie</option>
    </select>
    </td>
    <td>
    <select name="choixValue_0" onFocus="verifChoixValue_0();">
    <option value="0" selected>-- choisissez une valeur</option>
    </select>
    </td>
    <td><a href="#" onclick="delLigne(this); return false;">Supp</a></td>
    </tr>
    bon dans ce cas la ce n est que la ligne 0 mais j ai un script qui rename et change les onchange et onfocus pour chaque ligne ajouter

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 5
    Par défaut
    bon je me repond a moi meme pour dire que j ai reussi en parti, seulement sous IE.
    au lieu d avoir la premiere fonction que je duplique, j en ai une generique que j appelle avec this. et apres dans la fonction on navigue dans l arborescence pour trouver les valeurs
    function verifChoixValue(obj){
    var par = obj.parentNode;
    var table = getParent(par,'td');
    var ligne = getParent(table,'tr');
    var td = ligne.childNodes[1];
    var chx = td.firstChild;
    //alert("ligne name:"+ligne.getAttribute('id') );
    alert("chx:"+chx.getAttribute("id"));
    if (chx.nodeValue == "0"){
    alert('Vous devez tout d\'abord choisir un type de recherche!');
    chx.focus();
    }else{
    alert("value du champ a cote: "+chx.nodeValue);
    }
    }

    function remplirValeurs(code,obj){
    var lesValeurs = valeurs[code];
    var par = obj.parentNode;
    var table = getParent(par,'td');
    var ligne = getParent(table,'tr');
    var td = ligne.childNodes[2];
    var val = td.firstChild;
    if (code>0){
    val.options.length = lesValeurs.length;
    for (i=0; i<lesValeurs.length; i++){
    val.options[i].value = lesValeurs[i];
    val.options[i].text = lesValeurs[i];
    }
    val.options.selectedIndex = 0;
    }else{
    val.options.length = 1;
    val.options[0].value = 0;
    val.options[0].text = "-- choisissez une valeur";
    }
    }
    voila ca passe sous ie mais sous ff j'ai le droit a un "chx.getAttribute is not a function".

Discussions similaires

  1. Validation formulaire dynamique
    Par odelayen dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/08/2005, 17h47
  2. [JSF] Implémentation d'un formulaire dynamique
    Par Fleep dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/03/2005, 19h00
  3. pb access formulaire dynamique
    Par jibouze dans le forum IHM
    Réponses: 3
    Dernier message: 12/01/2005, 09h39
  4. formulaire dynamique
    Par shirya dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 19/10/2004, 16h13
  5. [struts]Formulaire dynamique
    Par GreenJay dans le forum Struts 1
    Réponses: 8
    Dernier message: 28/05/2004, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo