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 :

Modifier l'appel d'une fonction bas�e sur select


Sujet :

JavaScript

  1. #1
    Invit�
    Invit�(e)
    Par d�faut Modifier l'appel d'une fonction bas�e sur select
    Je suis d�butant en JS, et je travaille sur un ancien code compliqu�, en fait, j'essaie de remplacer une fonction appel� par "Select" qui permet de rajouter l'�l�ment s�lectionn� dans un input texte cach� qui se r�initialise � chaque fois.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    <select id="selectAptitudes" onchange="$('aptitudes_id').value=this.value; addAptitudeField(this,'aptitudes');">
     
    <input name="aptitudes_id" id="aptitudes_id" type="hidden" value="">
    Voici la fonction addAptitudeField:

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    addAptitudeField : function(currentAutocompleteField, idChamp) {
    // permet le passage de parametres au setTimeout
        var currentAutocompleteFieldBind = currentAutocompleteField;
        var idChampBind = idChamp;
    // le setTimeOut permet d'executer la fonction apres le vidage du
    // champ par la premiere fonction onblur
    // ne pas changer le timing de 400
        window.setTimeout(function() {
            var idChamp = idChampBind;
            var currentAutocompleteField = $(currentAutocompleteFieldBind);
            var currentValue = currentAutocompleteField.options[currentAutocompleteField.selectedIndex].title;
            var currentCategorie = currentAutocompleteField.options[currentAutocompleteField.selectedIndex].parentNode.label;
            var currentParent = currentAutocompleteField.parentNode;
            var allInputs = currentParent.getElementsByTagName("input");
            var countAllInputs = allInputs.length;
            var lastAutocompleteFieldId = allInputs[countAllInputs - 1];
            var lastValueId = "";
            if (lastAutocompleteFieldId != null) {
                lastValueId = lastAutocompleteFieldId.value;
            }
            // création du champ suivant
            if (currentValue != "" && (lastAutocompleteFieldId == null || lastValueId != "") && currentCategorie != "") {
                     var hiddenIdsField = $(idChamp);
            // On teste que l'aptitude n'est pas déjà ajoutée à la fiche
            var tabIds = hiddenIdsField.value.split(configuration.listSeparator);
            var found = false;
            for (var i = 0; i < tabIds.length && !found; i++) {
                found = tabIds[i] == lastValueId;
            }
            if (!found) {
                aptitudeAvecDetail.stockeTemporairementValeurs();
                var divCategorie = $("divCat" +currentCategorie);
                var nbAptitudesCat = 0;
                if (divCategorie) {
                    nbAptitudesCat = divCategorie.getElementsByTagName('div').length;
                } else {
                    // On crée la div de la catégorie si elle n'existe pas encore
                    var divList = $("list" + idChamp);
                    var newDivCategorie = "<div class=\"" +idChamp+"\" id=\"divCat" + currentCategorie + "\">";
                    newDivCategorie = newDivCategorie + "<span class=\"champConsultationValeur categorieAptitude\" >" + currentCategorie + "</span>";
                    newDivCategorie = newDivCategorie + "</div>";
                    divList.update(divList.innerHTML + newDivCategorie);
                    divCategorie = $("divCat" +currentCategorie);
                }
     
                var paramDwr = {};
                var newDivName = "div" + idChamp + lastValueId;
                paramDwr[attributs.r_divId] = newDivName;
                paramDwr[attributs.r_currentValue] = currentValue;
                paramDwr[attributs.r_hiddenIdsField] = hiddenIdsField.id;
                paramDwr[attributs.r_lastValueId] = lastValueId;
                paramDwr[attributs.r_itemmod] = nbAptitudesCat % 2 == 0;
     
                RepertoireDwr.ligneSuppEtSpanMessage(paramDwr, function(ajaxPage) {
     
                divCategorie.update(divCategorie.innerHTML + ajaxPage.texte);
     
                // on remets les valeurs qui auraient été settées
                aptitudeAvecDetail.remetsValeursStockees();
     
                if (hiddenIdsField.value != "") {
                    hiddenIdsField.value = hiddenIdsField.value + configuration.listSeparator;
                }
                hiddenIdsField.value = hiddenIdsField.value + lastValueId;
            }
     
            if ( $('selectAptitudes')){
                $('selectAptitudes').options[0].selected = true;
            }
     
            $(idChamp + "_id").value = "";
        }
        }, 400);
    },
    C'est tr�s compliqu�, non? Ce que j�essaie de faire c'est de remplacer le select par un ensemble de checkbox qui vont permettre la selection multiple des �l�ments, et un bouton pour d�clencher l��v�nement, mon �v�nement ajouterAptitude est d�clencher en cliquant sur un bouton

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ajouterApt = function(){
        var listApt = [];
        $('.Aptitudes input:checked').each(function() {
            listApt.push(this.name);
        });
        nbrItem = listApt.length;
        for(var i=0; i<nbrItem; i++){
            $('aptitudes_id').value=listApt[i].value;
            addAptitudeField(listApt[i],'aptitudes');
        }
    };
    Il permet d'appeler la premi�re fonction le nombre de fois que les cases coch�es. Malheureusement ce code ne marche pas, et quand je clique sur le bouton la page se ret�l�charge et je ne sais pas comment ni pourquoi.

    Avez vous des id�es, des pistes pour r�soudre ce probl�me.

    Merci d'avance

  2. #2
    Mod�rateur
    Avatar de kolodz
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : High Tech - Produits et services t�l�com et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par d�faut
    As-tu tent� de reprendre la fonctionnalit� de z�ro ? Je veux dire sur une page vierge...
    A mon avis, il est plus simple de refaire au propre en reprenant une par une les r�gles m�tiers que tu veux conserver.
    D'ailleurs, le code d'origine est tr�s obscure quant � son intention. Peut-�tre que l'ajout de commentaire sur le m�tier serai utile.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une r�ponse vous a �t� utile pensez �
    Si vous avez eu la r�ponse � votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Invit�
    Invit�(e)
    Par d�faut
    Merci pour le passage, en fait le code est compos� de plusieurs fonctions (+4000 lignes) et �a date depuis 2014, et j'ai peur de changer le comportement de l'application en modifiant le code, du coup je veux juste appeler la fonction autant que les cases coch�es, et passer les param�tres de la case � la fonction.
    Derni�re modification par NoSmoking ; 23/05/2016 � 15h21. Motif: Inutile de citer un message pour y r�pondre, il existe un bouton r�pondre � la discussion.

  4. #4
    Mod�rateur
    Avatar de kolodz
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : High Tech - Produits et services t�l�com et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par d�faut
    Tant que tu n'es pas en production, tu peux faire ce que tu veux. Donc fait le !
    En suite, tu te posera la question de savoir si tu veux que cela soit report� en production ou non.

    En n'ayant vue que le code que tu nous as fournit, je peux d�j� dire que dans les 4000+ lignes, il y doit y en avoir au moins 30% qui saute si tu fait de la mise au propre. (Cr�ation et utilisation de fonction... etc )

    Cordialement,
    Patrick Kolodziejczyk.

    PS : 2014, c'est pratiquement hier.
    Si une r�ponse vous a �t� utile pensez �
    Si vous avez eu la r�ponse � votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  5. #5
    Invit�
    Invit�(e)
    Par d�faut
    Je vais faire comme �a
    Merci, �a m'a encourag�
    Derni�re modification par NoSmoking ; 23/05/2016 � 15h21. Motif: (MP)Inutile de citer un message pour y r�pondre, il existe un bouton r�pondre � la discussion.

Discussions similaires

  1. Appel d'une fonction JS sur l'attr. d'une balise
    Par JYDARTHA dans le forum G�n�ral JavaScript
    R�ponses: 5
    Dernier message: 23/04/2015, 20h30
  2. Appel d'une fonction JS sur onchange
    Par Benduroy dans le forum G�n�ral JavaScript
    R�ponses: 13
    Dernier message: 30/10/2012, 15h02
  3. appel a une fonction membre sur un non-object
    Par totensai dans le forum Langage
    R�ponses: 2
    Dernier message: 14/01/2012, 22h43
  4. Aide sur une fonction � base de select case
    Par Lucorah dans le forum Macros et VBA Excel
    R�ponses: 1
    Dernier message: 23/06/2010, 09h35
  5. appel d'une fonction dans un select
    Par meri_mima dans le forum D�veloppement
    R�ponses: 2
    Dernier message: 15/10/2009, 16h56

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