La mise en œuvre de jQuery “live” classeur avec Javascript natif
Je suis à essayer de comprendre comment lier un événement à créer dynamiquement des éléments. J'ai besoin de l'événement à persister sur l'élément même après, il est détruit et régénérée.
Évidemment avec jQuery live fonction de ses facile, mais quelles seraient-elles mises en œuvre avec Javascript natif?
- Vous pouvez toujours lire le jQuery source :p. Pas sûr dans quelle mesure il serait originaire des JS cependant, puisque je suis sûr que ce sera assez dépendent d'elle-même par ce point (en termes d'utilisation des sélecteurs et autres joyeusetés).
- Juste une remarque:
.live()
est obsolète pour un long, long temps. Il a été remplacé par.delegate()
, qui a été remplacé par.on()
, veuillez utiliser le dernier. En outre, la dernière montre la différence entre la liaison et de délégation, de sorte que vous pouvez prendre un coup d'oeil. Le plus important est de vérifier pour la cible de l'événement. - Cette réponse de la mine peut aider stackoverflow.com/a/27373951/1385441
Vous devez vous connecter pour publier un commentaire.
Voici un exemple simple:
L'idée de base est que vous souhaitez associer un gestionnaire d'événement pour le document et de laisser le cas de la bulle jusqu'les DOM. Ensuite, vérifiez la
event.target
propriété pour voir si elle correspond aux critères souhaités (dans ce cas, il suffit que leid
de l'élément).Edit:
@shabunc découvert un assez gros problème avec ma solution, événements sur des éléments enfants de ne pas être détecté correctement. Une façon de résoudre ce problème est de regarder ancêtre éléments pour voir si certains ont spécifié
id
:id
vous avez spécifié. Je vais mettre à jour ma réponse pour refléter cela.En plus de Andrew post et Binyamin commentaire, c'est peut-être une option:
Avec cela, vous pouvez utiliser " nav .point a' tel que le sélecteur.
Basé sur Andrew code.
e.preventDefault()
à l'intérieur deaddEventListener
. Si elle est utilisée, alors vous aurez besoin de la modifier pourdocument.querySelector(elementQuerySelector).addEventListener(eventType, function (event) {
bien il va vous empêcher de vous en cliquant sur l'un des autres éléments sur la pageUne alternative à la liaison d'un événement de manière dynamique à un élément spécifique pourrait être un événement mondial de l'auditeur. Donc, chaque fois que vous mettez à jour le DOM avec un autre élément nouveau de l'événement sur cet élément aussi les "captures". Un exemple:
JS:
CSS:
HTML:
Dans cet exemple j'ai un écouteur d'événement sur le
<ul>
pour cliquez sur événements. Ainsi, un événement se produit pour tous les éléments enfants. De la simple gestionnaire d'événement que j'ai créé, vous pouvez voir qu'il est facile d'ajouter plus de logique, plus de boutons (avec différentes ou de répéter les noms), ancres, etc.De tous dans le, vous pourriez ajouter un eventlistener de document au lieu de l'élément de la liste, la capture de tous les événements de clic sur la page, puis cliquez sur gérer les événements dans le gestionnaire d'événements.
Les autres solutions sont un peu trop compliqué...
Il y a un polyfill dans le cas où vous avez besoin pour prendre en charge Internet Explorer ou les vieux navigateurs.