了解 JavaScript 事件并应用 jQuery events/plugins?
Understanding JavaScript events and applying jQuery events/plugins?
我有一堆 jQuery 使用 .on 事件的函数,因为我想防止将事件重新应用到同一元素。
但是有些人创建了插件(例如 Owl Carousel),我不知道如何防止此事件重新应用。
目前我使用的插件如下:
HTML:
<div class="init-owl"></div>
JS:
$('.init-owl').owlCarrousel();
$('.init-owl').removeClass('init-owl');
每当第二个元素被加载到页面中时,例如使用AJAX,我只想将事件应用到新添加的元素。
问题:我不明白的是事件如何停留在 DOM?
为了更好地掌握正在发生的事情,我想知道一个事件通常如何与 DOM?
相关联
是否有更好的方法来防止事件应用于相同的 DOM 元素?
如果我想编写自己的插件,我需要知道 javascript 是如何工作的,对吗?
Question: What I dont understand is how the event stays stuck to the DOM?
一旦事件绑定到一个对象,当对象被垃圾收集时它就会被删除。因此,如果 DOM 元素真的消失了并且没有对它的引用,那么事件也会被清除。
To better grip what is happening, I was wondering how an event in general gets connected to the DOM?
我不确定你想深入到什么程度。如果您停止考虑 DOM 和事件并更多地关注绑定到对象的常规事件,这可能会有所帮助。基本上,一个对象做了某事,或者对它做了某事,一些底层代码(在这种情况下是浏览器的代码)触发了该对象的事件。浏览器之间的实现可能不同,但基本上您将拥有一个映射到函数集合的键或字符串(事件名称)。添加事件侦听器时,您会向该集合添加另一个函数。然后,当某事触发该事件时,它会遍历函数并执行它们。这是一个真正的基本解释,但我希望它能让事情更清楚一点。
Is there a better way to prevent events applying to the same DOM elements?
确保您不会通过编写更好的代码再次添加事件。我不相信您可以深入研究一个元素并查看它是否绑定了事件。但是,您可以将 jQuery 选择器更改为仅针对新添加的元素。如果必须,请使用 class 或其他标记标记已添加事件的元素。然后你可以通过 $('.init-owl:not(.already-bound)')
来定位你的元素。我可以向您保证,您的问题有更好的解决方案,但我们可能需要更多上下文和代码才能找到更好的方法来帮助您。
编辑:
您可以查看 jQuery's off()
函数来删除事件。说不定对你也有帮助。
我有一堆 jQuery 使用 .on 事件的函数,因为我想防止将事件重新应用到同一元素。
但是有些人创建了插件(例如 Owl Carousel),我不知道如何防止此事件重新应用。
目前我使用的插件如下:
HTML:
<div class="init-owl"></div>
JS:
$('.init-owl').owlCarrousel();
$('.init-owl').removeClass('init-owl');
每当第二个元素被加载到页面中时,例如使用AJAX,我只想将事件应用到新添加的元素。
问题:我不明白的是事件如何停留在 DOM?
为了更好地掌握正在发生的事情,我想知道一个事件通常如何与 DOM?
相关联
是否有更好的方法来防止事件应用于相同的 DOM 元素?
如果我想编写自己的插件,我需要知道 javascript 是如何工作的,对吗?
Question: What I dont understand is how the event stays stuck to the DOM?
一旦事件绑定到一个对象,当对象被垃圾收集时它就会被删除。因此,如果 DOM 元素真的消失了并且没有对它的引用,那么事件也会被清除。
To better grip what is happening, I was wondering how an event in general gets connected to the DOM?
我不确定你想深入到什么程度。如果您停止考虑 DOM 和事件并更多地关注绑定到对象的常规事件,这可能会有所帮助。基本上,一个对象做了某事,或者对它做了某事,一些底层代码(在这种情况下是浏览器的代码)触发了该对象的事件。浏览器之间的实现可能不同,但基本上您将拥有一个映射到函数集合的键或字符串(事件名称)。添加事件侦听器时,您会向该集合添加另一个函数。然后,当某事触发该事件时,它会遍历函数并执行它们。这是一个真正的基本解释,但我希望它能让事情更清楚一点。
Is there a better way to prevent events applying to the same DOM elements?
确保您不会通过编写更好的代码再次添加事件。我不相信您可以深入研究一个元素并查看它是否绑定了事件。但是,您可以将 jQuery 选择器更改为仅针对新添加的元素。如果必须,请使用 class 或其他标记标记已添加事件的元素。然后你可以通过 $('.init-owl:not(.already-bound)')
来定位你的元素。我可以向您保证,您的问题有更好的解决方案,但我们可能需要更多上下文和代码才能找到更好的方法来帮助您。
编辑:
您可以查看 jQuery's off()
函数来删除事件。说不定对你也有帮助。