Problème de connaissance en javascript

Résolu
alexflex25 Messages postés 106 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 6 mars 2012 - 1 mai 2009 à 11:39
alexflex25 Messages postés 106 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 6 mars 2012 - 4 mai 2009 à 18:37
Bonjour à tous.
J'ai un petit problème avec une de mes fonctions.

OBJECTIF DE LA FONCTION:
Ajouter des valeurs à l'attribut "onclick" des mes balise HTML ''

Voici un premier exemple qui fonctionne mais qui est limité

(les lignes à analyser sont en rouge)

function liste_onclick_boutons(){
    //Liste des mes boutons
    var inputs = $$('input');
    //compteur de bouton
    var compteur = 0;
    
    //variable ajax0 pour le premier bouton
    var ajax0 = '';
    //variable action0 pour le premier bouton
    var action0 = '';
    //variable ajax1 pour le 2 bouton
    var ajax1 = '';
    //variable action1 pour le 2 bouton    
    var action1 = '';    
    
    //Pour chaque de ma page
    for(var i=0; i et qu'il possede des attributs "ajax" et "action"
        //exemple: '
        if(inputs[i].type == "button" && $(inputs[i]).getAttribute('ajax') != null && $(inputs[i]).getAttribute('action') != null){
            //suivant le numero de mon bouton
            switch(compteur){
                case 0:
                    //j'affecte la variable correpondante a mon bouton
                    ajax0 = $(inputs[i]).getAttribute('ajax');
                    action0 = $(inputs[i]).getAttribute('action');
                    //j'ajoute la valeur à la propriete onclick de mon bouton.
                    $(inputs[i]).onclick = function (){eval(gen_onclick(ajax0,action0));}                    
                break;
                case 1:
                    //j'affecte la variable correpondante a mon bouton
                    ajax1 = $(inputs[i]).getAttribute('ajax');
                    action1 = $(inputs[i]).getAttribute('action');
                    //j'ajoute la valeur à la propriete onclick de mon bouton.                    
                    $(inputs[i]).onclick = function (){eval(gen_onclick(ajax1,action1));}                
                break;
            }
            //j'incremente la valeur de mon compteur pour le bouton suivant
            compteur++;
        }
    }
}

l'idée finale est d'arriver à quelque chose comme ceci:

function liste_onclick_boutons(){
    var inputs = $$('input');
    var compteur = 0;   
   
    for(var i=0; i
Si j'utilise ma fonction de la maniéré suivante tous mes boutons se retrouve avec les mêmes valeurs de "ajax" et "action" que le dernier bouton.


function liste_onclick_boutons(){

    var inputs = $$('input');

    var compteur = 0;   

    var ajax = '';
    var action = '';

    for(var i=0; i








Merci à tous de votre aide.

2 réponses

Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
1 mai 2009 à 14:34
Tu peux binder sur une fonction un contexte et des paramètres qui seront ajoutés automatique à son appel. Pour faire simple, la plus plupart du temps ce qui est utilisé est ceci (c'est tiré de la librairie prototype) :

Function.prototype.bind = function() {    var __method this, args $A(arguments), object = args.shift();
    return function()
        return __method.apply(object, args.concat($A(arguments)));
    }
}

function $A(iterable) {
    if (!iterable) return [];
    if (iterable.toArray) {
        return iterable.toArray();
    } else {
        var results = [];        for (var i 0, length iterable.length; i < length; i++)
            results.push(iterable[i]);
            return results;
    }
}

que tu utilises par la suite comme ceci :

$(inputs[i]).onclick = function (ajax, action){
    eval(gen_onclick(ajax,action));
}.bind(this, ajax, action)
3
alexflex25 Messages postés 106 Date d'inscription vendredi 29 septembre 2006 Statut Membre Dernière intervention 6 mars 2012
4 mai 2009 à 18:37
Merci beaucoup, je viens de comprendre énormément de choses.
Merci encore!
0
Rejoignez-nous