javascript - 如何将 onClick 事件设置为延迟加载的图形或图像元素

标签 javascript jquery lazy-loading tampermonkey userscripts

嗯,我正在尝试在图像上使用 jQuery 设置 onClick 事件,以便在左键单击它后在另一个选项卡上打开它。 但看起来是因为 websitelazy loading图像,我的脚本不起作用。即使有很棒的waitForKeyElements script ,大多数时候,当页面包含 AJAX 内容时,我无法实现我正在寻找的内容,这可以拯救我。

请检查下面我的代码:

// ==UserScript==
// @include     https://revista*.globo.com/*.html
// @version     1.0
// @require     https://code.jquery.com/jquery-2.2.3.min.js
// @require     https://gist.githubusercontent.com/BrockA/2625891/raw/9c97aa67ff9c5d56be34a55ad6c18a314e5eb548/waitForKeyElements.js
// @grant       GM_openInTab
// @run-at      document-idle
// ==/UserScript==

waitForKeyElements("image.lazy-loaded.lazy-loaded", clickableImage, false);

function clickableImage (jNode) {

     jNode.each ( function () {
         var jThis = $(this);
         console.log( JSON.stringify( jThis ) );
         var imgLink = jThis.prop ("data-src");
         console.log( imgLink );

         jThis.on( "click", function() {

             GM_openInTab(imgLink);

         });


     } );

}

我正在使用 Firefox v68.0.1 和 Tampermonkey v4.9.5941

提前致谢。

<小时/>

this answer from the duplicate question explains和评论,我通过下面的代码实现了我的预期

waitForKeyElements("image.lazy-loaded.lazy-loaded", clickableImage, false);

function clickableImage (jNode) {

     var imgLink = jNode.data ("src");   
     jNode.on( "click", function() {

         GM_openInTab(imgLink);

     });
};

最佳答案

您可以使用 on 将事件处理程序绑定(bind)到尚不存在的元素。例如,如果最终可以使用 jQuery 选择器 .lazy-loaded 找到元素,那么您可以在已经存在的父元素(如 body)上绑定(bind)一个事件处理程序,并且事件将被捕获当它们最终冒泡时的处理程序:

$("body").on("click", ".lazy-loaded", function() {
  alert("clicked");
});

关于javascript - 如何将 onClick 事件设置为延迟加载的图形或图像元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57315386/

相关文章:

module - PrestaShop 中的延迟加载页面?

javascript - dygraphs:处理数百万个点

javascript - Play Framework 2.1 返回 HTTP header 而不是 JavaScript

javascript/jquery 变量未定义

javascript - 从谷歌代码链接 jquery.cookie.js?

java - Hibernate 在从相关实体中删除时加载 LOBS(不应该是懒惰的)?

javascript - 如何在 Angular 2 中延迟加载模板的一部分?

javascript - Trello 如何实时重新加载看板?

javascript - 如何从对象数组创建数组

jquery 向 css 函数添加新属性