Ajouter une méthode à un objet HTML ... [Résolu]

Signaler
Messages postés
514
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
1 mars 2009
-
Messages postés
514
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
1 mars 2009
-
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

Messages postés
289
Date d'inscription
vendredi 11 mars 2005
Statut
Membre
Dernière intervention
3 avril 2008
4
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
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
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
]~
Messages postés
514
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
1 mars 2009

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
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
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]~
Messages postés
514
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
1 mars 2009

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
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
36
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]~
Messages postés
514
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
1 mars 2009

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
Messages postés
514
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
1 mars 2009

Merci Ghislain,

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

++

LocalStone