简体   繁体   English

jQuery在动态加载的内容上运行脚本

[英]jQuery run script on dynamically loaded content

I load my pages dynamically using AJAX requests. 我使用AJAX请求动态加载页面。 In one of these pages I like to run a marquee script . 在这些页面之一中,我喜欢运行字幕脚本

Because the page is dynamically loaded, the marquee does not work. 因为页面是动态加载的,所以选取框不起作用。

I've read that I need to use .on for live events like these. 我已经读到我需要在.on直播活动中使用.on I currently have this: 我目前有这个:

$(document).on('load', '.marquee', function(event){
    $('.marquee').marquee({
        duration: 25000,
        startVisible: true,
        duplicated: true,
        gap: '5px'
    });
});

How can I resolve this to get the marquee working? 我该如何解决才能使选取框正常工作?

I assume you cannot initialise marquee in the Ajax success callback for some obscure reason... 我认为由于某些晦涩的原因,您无法在Ajax成功回调中初始化选取框...

So here a way out: Mutation Observer . 所以这是一个出路: Mutation Observer

Here is a snippet where I adapted the MDN example... And where I "simulate" an Ajax response using a setTimeout. 这是我改编MDN示例的代码段,...以及我使用setTimeout“模拟” Ajax响应的代码段。

 // Marquee init function function MarqueeInit(element){ element.marquee({ duration: 25000, startVisible: true, duplicated: true, gap: '5px' }); } // On load, init the static marquee. MarqueeInit($('.marquee')); // Simulating an Ajax response var marqueeString = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut cursus elit magna, non lacinia orci placerat non. Nunc cursus vestibulum orci. Fusce dapibus augue id."; setTimeout(function(){ $(".dynamic").append(marqueeString); },2000); // Applying a Mutation Observer on the destination div var targetNode = $(".dynamic")[0]; var config = { attributes: true, childList: true, subtree: true }; var callback = function(mutationsList) { for(var mutation of mutationsList) { if (mutation.type == 'childList') { console.log('A child node has been added or removed.'); // IMPORTANT! // Stop observing NOW because the marquee initialization will start an inifinite loop. observer.disconnect(); // Init Marquee! MarqueeInit($(".dynamic")); } } }; // Create an observer instance var observer = new MutationObserver(callback); observer.observe(targetNode, config); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jQuery.Marquee/1.5.0/jquery.marquee.min.js"></script> <h1>Static marquee</h1> <div class="marquee"> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis pharetra tellus a sem feugiat, vel blandit ipsum dignissim. Nam tincidunt placerat risus, et pretium ligula tempus id. Nulla tristique, arcu in euismod fringilla, odio erat venenatis arcu, id luctus turpis lorem vel massa. Curabitur at diam eget sem posuere dictum. Sed elementum placerat velit, eget bibendum velit lacinia sed. Nam commodo magna at gravida sodales. Vestibulum at eleifend augue, at condimentum ante. </div> <br> <h1>Dynamic marquee</h1> <div class="dynamic"> </div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM