Bonjour, J'ai une fonction qui doit renvoyer une liste composée de mots inclus dans différents tableaux. Je passe en paramètres un tableau contenant la liste des tableaux. Voici le script de ce que j'ai fais [code]

<meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="description" content=""><meta name="author" content=""><link rel="shortcut icon" href="docs-assets/ico/favicon.png"><title>test</title><script src="https://code.jquery.com/jquery-1.11.1.min.js"></script><script>

    jQuery(document).ready(function($) {

        function getList(liste) {
            var control = ['resize', 'scroll', 'zoom', 'focus', 'blur', 'select', 'change', 'submit', 'reset'],
                    keyboard= ['keydown', 'keyup', 'keypress', 'input'],
                    mouse = ['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mousemove', 'mouseout', 'mousewheel', 'wheel'],
                    all = control.concat(keyboard, mouse);

            console.log(liste);

            tab = [];

            for (var i=0; i < liste.length; i++) {
                    tab = tab.concat(liste*);

            }
            console.log('tableau : ' + tab);

            return tab;
        } // End getList()

    console.log('Fonction renvoi : ' + getList(['control', 'keyboard']));

    });

</script>[/code] Si je fais un [code]getList([control, keyboard][/code], j'ai une erreur comme quoi il ne connait pas control, ni keyboard (ce qui est logique, puisque se sont des variables locales à la fonction). Si je les mets entre ', il me revoie un string contenant les paramètres. Je précise que je ne peux mettre ces variables en globales puisque j'utilise cette fonction dans d'autres scripts. Dans mon exemple il devrait me renvoyer [code]['resize', 'scroll', 'zoom', 'focus', 'blur', 'select', 'change', 'submit', 'reset','keydown', 'keyup', 'keypress', 'input'][/code] Merci de votre aide

4 réponses


Govan06
Réponse acceptée

Salut, ton cas me semble être propice à l'utilisation d'un objet dans lequel tu mets tous tes events

function getList(liste) {
        var events = {
            control: 'resize', 'scroll', 'zoom', 'focus', 'blur', 'select', 'change', 'submit', 'reset'],
            keyboard: 'keydown', 'keyup', 'keypress', 'input'],
            mouse: 'click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mousemove', 
                    'mouseout', 'mousewheel', 'wheel']
        };

        var returnList = ];        
        if($.isArray(liste)) {
            for(var i= 0; i < liste.length; i++) {
                 returnList.push(events[liste[i]]);   
            }
        } else {
          returnList.push(events[liste]);   
        }

        return returnList;
} // End getList() 
console.log('Fonction renvoi : ' + getList('control', 'keyboard']));

Magnifique solution :)

Bravo et merci

Question subsidiare: comment on peut faire pour l'option : "all", car pour simplifier dans l'exemple je n'ai que 3 listes mais en réalité il y e a beaucoup plus

Pour faire cette option je prendrais en compte 2 cas: celui où on ne passe rien du tout en paramètre ex getList() ou un paramètre all ex getList('all').

Dans ce cas :

function getList(liste) {
        var events = {
            control: 'resize', 'scroll', 'zoom', 'focus', 'blur', 'select', 'change', 'submit', 'reset'],
            keyboard: 'keydown', 'keyup', 'keypress', 'input'],
            mouse: 'click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mousemove', 
                    'mouseout', 'mousewheel', 'wheel']
        };

        var returnList = ];
        if(typeof liste === 'undefined' || liste === 'all') {
            //return events // retourne directement l'objet entier
            // OU
            for(var key in events) {
                 returnList.push(events[key]);   
            }
            return returnList;
        }
        // reste du code...
 }

Bravo tu as gagné le filet garni :)

Merci beaucoup