<a href="" id="someId" onclick="SomeMethod(self);"></a>
Où SomeMethod aurait pu:
function SomeMethod(item)
{
item.setAttribute('name', item.id);
}
Au lieu de:
function SomeMethod(itemId)
{
var someItem;
someItem = document.getElementById(itemId);
someItem .setAttribute('name', someItem .id);
}
Exemple idiot, mais l’idée n’est pas d’envoyer l’id lui-même, mais le contrôle qui appelle la méthode. Je jure que cela peut être fait mais je n'ai pas eu la chance de chercher ... en partie parce que je ne sais même pas sur quoi chercher.
Je pensais que c'était moi, mais le moi ne semble pas être ce que je veux quand le script que j'ai est exécuté.
Utilisez le mot clé this
.
<a href="" id="someId" onclick="SomeMethod(this);"></a>
En fait, vous n’avez pas besoin de passer this en tant qu’argument pour votre fonction, car vous avez un objet événement click auquel vous pouvez accéder. Alors:
<a href="" id="someId" onclick="clickEventHandler()"></a>
<script>
function clickEventHandler(event) {
if (!event) {
event = window.event; // Older versions of IE use
// a global reference
// and not an argument.
};
var el = (event.target || event.srcElement); // DOM uses 'target';
// older versions of
// IE use 'srcElement'
el.setAttribute('name', el.id);
}
</script>
J'ai tendance à utiliser cette approche dans tous les appels de fonction à partir d'attributs HTML: -
onclick="SomeMethod.call(this)"
Puis dans le javascript faire: -
function SomeMethod()
{
this.setAttribute('name', this.id);
}
Cela présente un avantage particulier lorsque vous pouvez également affecter directement des propriétés de gestionnaire d’événements en code Javascript: -
document.getElementById("someID").onclick = SomeMethod
Si SomeMethod a pris l'élément context en tant que paramètre, il serait très difficile de configurer: -
function(id) {
var elem = document.getElementById(id)
elem.onclick = function() { SomeMethod(elem); }
}("someID");
Pire encore, ce serait une fuite de mémoire.
À ce stade: SomeMethod(this)
- this
renvoie l'objet window, ne l'utilisez pas. La bonne façon d'utiliser le mot clé this
consiste à le rendre pertinent par rapport au contexte. Utilisez donc SomeMethod.call(this)
.