Ajouter une méthode à un objet HTML ...

Résolu
LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009 - 3 août 2005 à 20:07
LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009 - 5 août 2005 à 11:25
Alors voilà ... J'ai une question assez pointue que je n'arrive pas à
résoudre tout seul et c'est pourquoi je demande votre aide ... Comment
je peux faire pour ajouter une méthode à un élément HTML. Par exemple :


<script>


Object.prototype.Test= function ()


{


alert('Test ! ');


}


</script>

Et du coup si je fais par exemple :
document.getElementById('n_importe_quoi').Test();, bah j'ai une boite
de dialogue qui apparait ...


Je sais pas du tout si c'est la bonne voie, mais je pense que l'on peut comprendre ma demande à travers cet exemple.

J'avoue que ça m'aiderait beaucoup de trouver ... Snif, alors aidez-moi !

++ !

LocalStone

8 réponses

GhislainLavoie Messages postés 289 Date d'inscription vendredi 11 mars 2005 Statut Membre Dernière intervention 3 avril 2008 3
5 août 2005 à 03:18
Salut!

Je ne crois pas qu'il sot possible d'ajouter une mehode a un objet html sans avoir préalablement ajouter cette methode.

Le prototypage ne fontionne que pour les éléments js qui sont créer avec des nouveaux constructeurs [new QQC(), QQC étant une fonction] ou les objets déjà définit dans js soit : les Array, Boolean, Date, Function, Number, Object et String.

Faire une boucle pour tous les éléments comme propose Bul me semble la méthode la plus appropriée. Et si tu créer des éeélments dynamiquement, il faudra appliquer les méthodes qu'il faut.

Pour réussir a exécuter le prototype Test() de ton exemple, il faudrait par exemple l'appliquer au niveau d'un objet pour lequel il est possible de l'appliquer.

Par exemple sur une string :

document.getElementById('QQC').className.Test();

A+, Ghislain
3
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
4 août 2005 à 09:46
Bonjour,
je ne sais pas si j'ai bien compris ....
un ch'tit exemple pour voir ?

<script type="text/javascript">
function appel(btn)
{ alert ("après appui sur "+btn+"\r\nclick sur le texte"); }
</script>
</HEAD>

<form name="frm">

Modif size
ajout Onclick

</form>

Cordialement. Bul. ~
Site
~~
[mailto:marcelBultez@tiscali.fr Mail
]~
0
LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009
4 août 2005 à 13:46
Salut Bultez, merci de ton aide.

Ta methode pour ajouter une methode (étrange, ça ...) marche très bien.
Mais elle fonctionne que avec l'élément que j'ai défini. En fait, moi
je voudrais que ça marche pour tous les éléments de la page sans que
j'ai à le faire un par un. En fait, voilà un exemple concret :

<html>

<head>

<script type="text/javascript">

var arrYellow = [


["borderStyle", "solid"],


["borderWidth", "1px"],


["borderColor", "#FFFF00"],


["backgroundColor", "#FFFFEE"],


["color", "#FFFF00"]


];

function ApplyStyle(arrList)

{

var i;

for(i = 0; i < arrList.length; i++)

{

this.style[arrList[i][0]]= arrList[i][1];

}

}

onload = function()

{

frm.bouton.setAttribute("ApplyStyle", ApplyStyle);

}

</script>

</head>



<form name="frm">

ajout
Onclick

</form>



</html>

Je pense que tu saisis le but de la fonction. Mais le truc, c'est que
j'aimerais qu'elle fonctionne pour n'importe quel élément HTML. Donc si
tu as une idée ...





LocalStone
0
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
4 août 2005 à 14:58
un ch'tit exemple ou on passe l'objet
où appliquer en paramètre

<script type="text/javascript">
function mem(obj,att1,att2)
{ obj.setAttribute(att1,att2); }
function appel(btn)
{ alert ("après appui sur "+btn+"\r\nclick sur le texte"); }
</script>
</HEAD>

<form name="frm">

Modif size
ajout Onclick
</form>

normalement tu es assez fort pour appliquer ça à
tous les éléments d'un contenant ( body, form .. )
mais si besoin de plus ....
Cordialement. Bul. ~Site~~[mailto:marcelBultez@tiscali.fr Mail]~
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009
4 août 2005 à 15:13
Oui ! Mais non ...

En fait, pour la beauté du code, je veux rajouter la méthode ApplyStyle(); que
j'ai définie avant à TOUS les éléments HTML. Bien sur que je peux faire
une fonction comme tu m'as dit, mais c'est moins ... Joli !

Par exemlpe :

<script>

Array.prototype.getLength = function()

{

return this.length;

}

</script>

Ensuite, quelque soit le tableau que je vais créer, la méthode va être applicable à toutes les instances.

<script>

test = new Array("le ciel", "les oiseaux", "ta mère");

alert(test.getLength()); // Me renveras 3.

</script>

Et bah je cherche à créer une méthode pour tous les éléments HTML (tous ce que l'on peut récuperer par getElementById(), getElementsByTagName(), etc.) ...

J'espère que je suis assez clair ...

Voilà ! T'as vu, c'est pas du gateau ...

LocalStone
0
cs_bultez Messages postés 13616 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
4 août 2005 à 15:40
tous les elements d'un formulaire
c'est ok mais les éléments d'une page ?
je ne sais plus [ ou pas ]

for ( n=0;n<frm.elements.length;n++)
{ sûrement un switch en fonction du type
switch (frm.elements[n].type) {
case "text":
appliquer setattribute à frm.elements[n];
break;
case ...
default:
break; } }

Cordialement. Bul. ~Site~~[mailto:marcelBultez@tiscali.fr Mail]~
0
LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009
4 août 2005 à 16:40
J'avais pas pensé à ça
... Mais je sais pas, ça fait bricolage. Mais en même temps, je crois
que c'est ce que je vais faire. Le problème, c'est que si je crée un
éélment avec createElement(); après que la boucle ait été lancée, alors la methode ne sera pas présente pour ce dernier. Donc en fait, non, ça va pas ...

Mais je suis sur qu'il doit y avoir un truc avec prototype ou quelque chose comme ça ... Mais j'ai (un peu) cherché sur MSDN et j'ai rien trouvé.

Merci de ton aide ! Parce que t'es le seul à avoir tenter des réponses, jusque là !

LocalStone
0
LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009
5 août 2005 à 11:25
Merci Ghislain,

C'est chiant, ça, ça veut dire que le Javascript à des limites, alors ... Merde.

++

LocalStone
0
Rejoignez-nous