Je affecte une fonction de gestionnaire d'événements à un élément via la propriété onclick du navigateur natif:
document.getElementById('elmtid').onclick = function(event) { anotherFunction(event) };
Lorsque je suis dans anotherFunction(event)
, je souhaite utiliser l'objet d'événement comme je le ferais avec l'objet d'événement que vous obtenez dans jQuery à l'aide de la méthode .on()
. Je veux le faire car l'objet d'événement jQuery possède des propriétés et des méthodes telles que .pageX
, .pageY
et .stopPropagation()
qui fonctionnent dans tous les navigateurs.
Donc, ma question est posée, après avoir passé dans l'objet d'événement du navigateur natif dans anotherFunction()
, comment puis-je la transformer en un événement jQuery? J'ai essayé $(event)
, mais cela n'a pas marché.
La question évidente ici est la suivante: pourquoi n'utilisez-vous pas jQuery .on
, .bind
, .click
etc pour assigner vos fonctions de gestion d'événement? La réponse: Je construis une page qui contient une énorme table avec beaucoup de choses cliquables. Malheureusement, ce projet exige que la page DOIT rendre rapidement dans IE6 et IE7. L'utilisation de .on
et al dans IE6 et IE7 crée des fuites DOM et consomme de la mémoire très rapidement (testez-vous avec Drip: http://outofhanwell.com/ieleak/index.php?title=Main_Page ). Le fait de configurer le comportement de .onclick
via .onclick
est la seule option que je dois faire rapidement dans IE6 et IE7.
Trop longtemps pour un commentaire … Parce que la documentation est un peu vague à ce sujet … (je regarde 1.7.1 dans ce qui suit)
jQuery.Event(event, props)
:
type
propriété type
de l'événement. isDefaultPrevented
par les appels normalisés à toutes les façons de vérifier si la valeur par défaut est empêchée. originalEvent
pour faire référence à l'événement que vous avez passé. Ce que vous obtenez est essentiellement un nouvel objet avec quelques propriétés supplémentaires et une référence à l'événement d'origine – pas de normalisation autre que isDefaultPrevented
.
jQuery.event.fix(event)
:
jQuery.Event()
une copie inscriptible (par jQuery.Event()
) et normalise les propriétés mentionnées ici . ETA:
En fait, en regardant de plus près le code, jQuery.event.fix()
devrait fonctionner – de la manière décrite par @ Beetroot-Beetroot. C'est tout ce que jQuery fait pour créer l'objet d'événement jQuery dans une dépêche d'événement.
Vous voulez jQuery.event.fix
.
new jQuery.Event(nativeEvent)
nativeEvent
comme propriété originalEvent
. Notez à ce stade que l'événement n'a pas de propriétés "eventy", juste originalEvent
, timeStamp
et les fonctions de timeStamp
/ défaut.
jQuery.event.fix(nativeEvent)
nativeEvent
de nativeEvent
, plus spécifiques du crochet de correction target
et les propriétés metaKey
Essaye ça:
document.getElementById('elmtid').onclick = anotherFunction;
avec:
function anotherFunction(evt){ evt = $.event.fix(evt || window.event);//Note need for cross-browser reference to the native event ... }