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 :

Renommer une fonction dans un select ou concevoir autrement une fonction


Sujet :

JavaScript

  1. #1
    Membre régulier Avatar de tavarlindar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 262
    Points : 97
    Points
    97
    Par défaut Renommer une fonction dans un select ou concevoir autrement une fonction
    Bonjour,

    Je suis perdu dans la définition d'une fonction et je ne vois pas comment faire.

    Pour mieux comprend the problème : ma page de test.
    (affiche code source)

    Si je devais formuler ma question à priori je dirais comment renommer la valeur d’une fonction dans un select, mais je prends sans doute le problème de la mauvaise façon.

    J’explique :
    Lorsque je sélectionne un provider (prenons Loueur de bateaux indépendant), l’application rapatrie tous les bateaux connus et gérés par ce fournisseur. (Ici 3 bateaux). Je stocke ces infos dans une variable js.

    Par défaut, la liste fait apparaître le premier bateau connu.
    Si on sélectionne un autre bateau dans la liste, j’ai une fonction qui met à jour les infos dans les autres champs (model, year et name).
    Cette fonction est majinfosbateau(1). L’idée est de transmettre à la fonction le numéro de ligne sélectionné. C’est pourquoi par défaut j’ai mis en dur dans le code HTML : majinfosbateau(1).

    Maintenant, on peut rajouter des lignes au tableau. Lorsqu’on rajoute une ligne, la fonction ajoutLigneAuTableau(num_tbody) crée la même chose que la 1ere ligne. Elle crée donc de nouvelle cellules avec les même attributs, y compris les id et name.
    Comme tous les champs doivent avoir des id et name uniques (numéroté), je dois utiliser une fonction qui me rénumote le tout. J’utilise la fonction majNumLignes(num_tbody).

    J’arrive à modifier les numéros des id et name, mais je n’arrive pas à renuméroter la valeur du onchange=’majinfosbateau(1)’.

    D’où mes 2 questions :
    1) Comment peut-on modifier la fonction majNumLignes(num_tbody) pour avoir onchange=’majinfosbateau(2)’, onchange=’majinfosbateau(3)’, etc.
    2) Peut on faire autrement et plus simple en modifiant cette fois-ci la fonction majinfosbateau() de sorte à ne pas à avoir à renommer ma fonction majinfosbateau(n) ?

    Fonction


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    function majNumLignes(num_tbody)
    {
    // Fonction qui permet de numéroter les differents champs 
    var nbLignes = nbLignesBateaux ; 
     
    		for(var i = 0 ; i < nbLignes ; i++){
    		var tbl = document.getElementById('tableau_bateaux');
    		//tbl.tBodies[num_tbody].rows[i].className = 'bleu'+(i%2);
     
    		//Mise à jour pour test du compteur de ligne (cellule 1)
    		tbl.tBodies[num_tbody].rows[i].cells[1].innerHTML = (i+1);
     
    		//Mise a jour de la cellule 2 (liste des bateaux)
    		tbl.tBodies[num_tbody].rows[i].cells[2].getElementsByTagName('SELECT')[0].setAttribute('name','id_bateau'+(i+1));
    		tbl.tBodies[num_tbody].rows[i].cells[2].getElementsByTagName('SELECT')[0].setAttribute('id','id_bateau'+(i+1));
    		//tbl.tBodies[num_tbody].rows[i].cells[2].getElementsByTagName('SELECT')[0].onchange = function () {majinfosbateau()};
     
    		//Mise a jour de la colonne 3(liste des modelet type de bateaux)
    		tbl.tBodies[num_tbody].rows[i].cells[3].getElementsByTagName('SELECT')[0].setAttribute('name','id_model_bateau'+(i+1));
    		tbl.tBodies[num_tbody].rows[i].cells[3].getElementsByTagName('SELECT')[0].setAttribute('id','id_model_bateau'+(i+1));
     
    		//Mise a jour de la colonne 4 (annee de bateaux)
    		tbl.tBodies[num_tbody].rows[i].cells[4].getElementsByTagName('INPUT')[0].setAttribute('name','annee_bateau'+(i+1));
    		tbl.tBodies[num_tbody].rows[i].cells[4].getElementsByTagName('INPUT')[0].setAttribute('id','annee_bateau'+(i+1));
     
    		//Mise a jour de la colonne 5 (nom du bateaux)
    		tbl.tBodies[num_tbody].rows[i].cells[5].getElementsByTagName('INPUT')[0].setAttribute('name','nom_bateau'+(i+1));
    		tbl.tBodies[num_tbody].rows[i].cells[5].getElementsByTagName('INPUT')[0].setAttribute('id','nom_bateau'+(i+1));
    		}
    		var id_bateau_selected = document.getElementById("id_bateau1").value;
    		var model_selected = document.getElementById("id_model_bateau1").value;
     
    		document.getElementById('id_bateau'+nbLignes).value = id_bateau_selected;	
    		document.getElementById('id_model_bateau'+nbLignes).value = model_selected;		
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    function majinfosbateau(num) {
    // On recupere l'id_bateau qui vient d'etre selectionne appartenant au champ select dont le numero est num
    var id_bateau_selectionne = document.getElementById('id_bateau'+num).value;
    alert ('id_bateau_selectionne :'+id_bateau_selectionne);
    	if (id_bateau_selectionne == 0) {
    	document.getElementById('id_model_bateau'+num).value = 0;
    	document.getElementById('annee_bateau'+num).value = '';
    	document.getElementById('nom_bateau'+num).value = '';
     
    	}
    	else {
    	document.getElementById('id_model_bateau'+num).value = eval('arraybateau['+id_bateau_selectionne+']')[4];
    	document.getElementById('annee_bateau'+num).value = eval('arraybateau['+id_bateau_selectionne+']')[3];
    	document.getElementById('nom_bateau'+num).value = eval('arraybateau['+id_bateau_selectionne+']')[2];
     
    	}
    }

  2. #2
    Membre régulier Avatar de tavarlindar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 262
    Points : 97
    Points
    97
    Par défaut
    j'ai trouvé la réponse à la première question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	tbl.tBodies[num_tbody].rows[i].cells[2].getElementsByTagName('SELECT')[0].setAttribute('onchange','majinfosbateau('+(i+1)+')');
    mais peut_on faire autrement ?

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 644
    Points : 66 671
    Points
    66 671
    Billets dans le blog
    1
    Par défaut
    pour que ce soit crossbrowser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tbl.tBodies[num_tbody].rows[i].cells[2].getElementsByTagName('SELECT')[0].onchange=fucntion(){majinfosbateau(i+1)}
    ;

    Sinon un petit topt sur l'appel dynamique de fonctions ?
    c'est tout frais .. http://www.developpez.net/forums/sho...wpost&t=558109

  4. #4
    Membre régulier Avatar de tavarlindar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 262
    Points : 97
    Points
    97
    Par défaut
    Eh malheureusement non,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tbl.tBodies[num_tbody].rows[i].cells[2].getElementsByTagName('SELECT')[0].onchange=fucntion(){majinfosbateau(i+1)}
    j'avais déjà essayé avant de poster et cela ne fonctionne la preuve.

    Mon code oui, enfin sous IE je ne sais pas car je viens de découvrir que toute l'application ne tourne pas sur IE

    Je deviens fou .....

    Mon application AJAX ne fonctionne pas .....
    Si je choisi Loueur de bateaux indépendant', l'application se fige ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    erreur : 
    'caractère : 7
    'arraybateau[...].2' a la valeur null ou n'est pas un objet
    code 0

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getElementsByTagName('select')
    En minuscules, le nom des tag ...

    A+

  6. #6
    Membre régulier Avatar de tavarlindar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 262
    Points : 97
    Points
    97
    Par défaut
    sauf erreur de ma part, cela ne change pas le problème. Je viens d'essayer avec les minuscules .....

    et puis , de toute façon, avant cela, rien ne fonctionne sous IE.

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par tavarlindar Voir le message
    sauf erreur de ma part, cela ne change pas le problème. Je viens d'essayer avec les minuscules .....

    et puis , de toute façon, avant cela, rien ne fonctionne sous IE.
    Au risque de te décevoir, je crains qu'il te faille chercher plus d'une erreur dans ton code

    Je ne fais que tenter de débroussailler

    A+

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 644
    Points : 66 671
    Points
    66 671
    Billets dans le blog
    1
    Par défaut
    j'espère que tu n'as pas fait un copier coller de mn code



  9. #9
    Membre régulier Avatar de tavarlindar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 262
    Points : 97
    Points
    97
    Par défaut
    non je n'ai pas fait un copier coller .... j'avais corrigé cette faute de frappe.

    tu peux faire un affiche source code .....

  10. #10
    Membre émérite
    Inscrit en
    Septembre 2002
    Messages
    2 307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 307
    Points : 2 814
    Points
    2 814
    Par défaut
    arraybateau[parseInt(numero_id_bateau)] = new Array();

  11. #11
    Membre régulier Avatar de tavarlindar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 262
    Points : 97
    Points
    97
    Par défaut
    merci, mais cela n'a pas changer le problème avec IE.

  12. #12
    Membre régulier Avatar de tavarlindar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 262
    Points : 97
    Points
    97
    Par défaut
    Bon, j'ai corrigé des bugs, mais je n'arrive toujours pas à renommer une fonction pour que FireFox et IE soit ok.

    Voici la dernière mouture de ma page de test

    Le problème ?


    faire les tests uniquement avec "Loueur indépendant".
    Quand je rajoute des lignes à mon tableau de bateau (partie rose),
    ma fonction qui doit renuméroter les champs ne fonctionne pas sous IE.

    La page de test ci-dessus utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tbl.tBodies[num_tbody].rows[i].cells[2].getElementsByTagName('select')[0].setAttribute('onchange','majinfosbateau('+(i+1)+')');
    qui fonctionne sous FF mais évidemment pas sous IE.

    Il faut utiliser une structure du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tbl.tBodies[num_tbody].rows[i].cells[2].getElementsByTagName('select')[0].onchange = function(){majinfosbateau(i+1)};
    mais si je fais cela, cela ne marche pas sous FF et IE ...


  13. #13
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 644
    Points : 66 671
    Points
    66 671
    Billets dans le blog
    1
    Par défaut
    tu as un message d'erreur ?
    un souci de reference, ce n'est pas le bon bateau qui est visé ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    tbl.tBodies[num_tbody].rows[i].cells[2].getElementsByTagName('select')[0].indice=i+1;
     
    tbl.tBodies[num_tbody].rows[i].cells[2].getElementsByTagName('select')[0].onchange = function(){majinfosbateau(this.indice)};

  14. #14
    Membre régulier Avatar de tavarlindar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 262
    Points : 97
    Points
    97
    Par défaut
    hum, malheureusement, cela bugge toujours sous IE Et FF

    page avec ton code

  15. #15
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 644
    Points : 66 671
    Points
    66 671
    Billets dans le blog
    1
    Par défaut
    bien joli cette page, mais ne sachant pas le comportement attendu ...

  16. #16
    Membre régulier Avatar de tavarlindar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 262
    Points : 97
    Points
    97
    Par défaut
    Ok,
    Avant tout merci pour ton aide.

    Si on change le Provider, on doit avoir la liste des bateaux qui se met à jour en bas (tableau rose et jaune). (tous les choix sont bons sauf Antilles sail, car je n'ai pas encore mis à jour le code)
    Si on clique sur un autre bateau, toute la ligne doit s'actualiser.

    Si on rajoute des lignes, si on clique sur un bateau déjà connu, alors tout la ligne doit aussi s'actualiser.

  17. #17
    Membre régulier Avatar de tavarlindar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 262
    Points : 97
    Points
    97
    Par défaut


    désolé, je viens de corriger .... il semble que tout fonctionne ...!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2008] Créer une colonne en fonction d'une donnée dans un select
    Par Naruto_kun dans le forum Développement
    Réponses: 8
    Dernier message: 05/11/2013, 10h01
  2. appel d'une fonction dans un select
    Par meri_mima dans le forum Développement
    Réponses: 2
    Dernier message: 15/10/2009, 17h56
  3. appeller une Vue dans un Select
    Par DR. dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/12/2004, 17h59
  4. Pl/SQL utilisation d'une variable dans un select
    Par larg dans le forum PL/SQL
    Réponses: 17
    Dernier message: 30/11/2004, 18h08
  5. ajout d'une constante dans un select
    Par Shabata dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/07/2004, 19h24

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