Conseils sur une méthode de stockage d'attributs
Bonjour
Voilà mon site contient plusieurs DIV auxquelles j'aimerais stocker des informations sur l'action à mener en fonction d'un événement sur ce DIV.
il y a donc l'événement en lui même, l'action à effectuer et une condition et ces 3 éléments peuvent être multipliés par autant d'événement d'action ou de condition que je souhaite associer au DIV.
J'ai donc la possibilité de créer un tableau contenant plusieurs tableau associatifs lesquels contiendrait les 3 éléments "événement, action, condition" et bien sure l'identifiant du DIV pour pouvoir retrouver ces informations en fonction du DIV.
Cela m'oblige à boucler dans le tableau à chaque fois pour lire les informations stockées.
Autre possibilité
Celle de stocker les informations sous forme d'attributs dans mon DIV, certe je n'ai pas la possibilité de stocker un tableau dans un attribut mais je peux écrire quelque chose comme cela.
Code:
1 2 3 4
|
Div.setAttribute("Event", "mouseMove,mouseOut,mouseDown");
Div.setAttribute("Cond", "true,true,true");
Div.setAttribute("DIVID=DIV_LEFT:BackgroundColor=F0F0F0,DIVID=DIV_LEFT:BackgroundColor=FFFFF0,DIVID=DIV_LEFT:BackgroundColor=0F0F0F" |
un split sur chaques attributs par la virgule me permettant de récupérer chaque éléments.
Quel solution vous semble la mieux ou y a t'il une autre approche possible (par exemple par le dataset ?), merci à vous pour vos avis.
Inutile de citer un message pour y répondre.
J'imagine que si tu en reparles c'est que tu penses que je n'utilise pas la bonne méthode alors voici la partie du code concerné.
Code:
1 2 3 4 5 6 7 8 9 10
|
function AjoutEvents(Div, ObjDiv)
{
for(var i in ObjDiv)
{
Div.Events.push(ObjDiv[i]);
Div.addEventListener(Div.Events[i].Event, SeqEvent);
}
} |
ou ObjDiv ressemble à cela.
Code:
1 2 3 4 5
|
ObjEvent = { "Event":"click", "Cond":"true", "Action":"Modif", "Affect":"TAB02.style.visibility.hidden"},
ObjEvent = { "Event":"click", "Cond":"true", "Action":"Modif", "Affect":"TAB01.style.visibility.visible"},
ObjEvent = { "Event":"click", "Cond":"true", "Action":"Modif", "Affect":"BTN01.style.backgroundColor.#FFFFFF"},
ObjEvent = { "Event":"click", "Cond":"true", "Action":"Modif", "Affect":"BTN02.style.backgroundColor.#000000"} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
function SeqEvent(evt)
{
var _Target = evt.target;
var _TypeEvt = evt.type;
for(var x in _Target.Events)
{
if(_TypeEvt === _Target.Events[x].Event)
{
if(_Target.Events[x].Cond)
{
var TabParam = _Target.Events[x].Affect.split(".");
var _Div = document.getElementById(TabParam[0]);
Modif_Obj(_Div, TabParam[1], TabParam[2], TabParam[3]);
}
}
}
} |
La fonction SeqEvent va évoluer en fonction de mes besoins, elle n'est pas optimisée non plus, pour l'instant je suis sur une autre partie de mon programme, mais il y aura une fonction pour le test de ma Condition qui sera plus évolué qu'un simple true ou false, et pour l'action actuellement j'ai juste testé la modification des éléments style d'un DIV mais il y aura aussi d'autre type d'action.
Si tu penses que cela peut être optimisé fait moi part de tes remarques merci.