Je veux créer un eventHandler qui passe "cet" objet en paramètre. J'ai essayé
<select id="customer" onchange="custChange(this);">
cela fonctionne bien et obtient l'objet dom sur lequel même lors du changement a été appelé.
Mais selon ma compréhension, cela ne devrait pas fonctionner car le premier argument est attendu comme "événement" (et non pas "cet" objet) dans la méthode du gestionnaire d'événements comme ci-dessous
<select id="customer" onchange="custChange(event);">
pouvons-nous passer n'importe quel argument (ceci ou événement) dans la méthode eventHandler à condition que leur nom soit correct ou le premier argument sera toujours considéré comme un objet d'événement?
Vous avez défini custChange
et plus important encore: vous êtes l'appeler. Vous pouvez donc décider vous-même quels arguments il doit accepter et dans quel ordre. Seulement pour les fonctions qui ne sont pas appelées par vous, vous devez faire attention à l'ordre des arguments.
Mais si vous voulez définir custChange
pour qu'il soit compatible avec autres façonsdes gestionnaires d'événements de liaison , c'est-à-dire.
function custChange(event) {
// `this` refers to the DOM element
}
alors vous pouvez l'appeler avec
custChange.call(this, event);
J'ai fait un test.
function change(){
console.info( arguments );
}
<select name="" id="" onchange="change( this, event )">
<option value="1">A</option>
<option value="2">B</option>
<option value="3">C</option>
</select>
<select name="" id="" onchange="change( event, this )">
<option value="1">A</option>
<option value="2">B</option>
<option value="3">C</option>
</select>
<select name="" id="" onchange="change( this, e )">
<option value="1">A</option>
<option value="2">B</option>
<option value="3">C</option>
</select>
J'ai utilisé les sélections ci-dessus un par un, puis j'ai obtenu les informations sur la console ci-dessous:
Ainsi, à partir des résultats, j'ai conclu que nous devons passer le bon mot dans l'appel de page et que nous pouvons changer leur position.
Le premier argument sera toujours l'événement.
[edit] Vous pouvez appeler votre gestionnaire avec l'argument de votre choix, les objets event
et this
étant disponibles lors de l'appel. event
fait référence à l'objet événement et this
fait référence à l'objet dom qui déclenche l'événement. [/ edit]
Cependant, dans le gestionnaire event.currentTarget
sera lié à l'objet qui a déclenché l'événement:
<script>
function custChange(event) {
// event.currentTarget = select element
}
</script>
<select id="customer" onchange="custChange(event);">
Vous pouvez peut-être faire ça comme ceci:
<p><a id="link" href="#">click me</a></p>
<script>
var link = document.getElementById("link");
AttachEvent(link, "click", EventHandler);
function AttachEvent(element, type, handler) {
if (element.addEventListener) element.addEventListener(type, handler, false);
else element.attachEvent("on"+type, handler);
}
J'espère que ça aide.
Vous pouvez le faire selon un javaScript discret:
$("#customer").on("change", function () {
... and here you have $(this) object linked to 'customer' select
});