javascript - 无法选择 Javascript 附加的 HTML 元素

标签 javascript jquery arrays

我知道这是一个非常常见的问题,即使我已经解决了很多次这样的问题,但有很多这样的问题已经得到解答,但是这次我陷入了这一点。我尝试应用许多解决方案,但没有任何效果。

这就是我的 JS 的样子:

jQuery(document).ready(function($){
    avHomePageThumbnails();
    var slideIndex = 0; showSlides();


    function avHomePageThumbnails(){
        let homePagePosts = JSON.parse(posts_data);
        homePagePosts.map( homePagePost => {
            let screenID = homePagePost.query_vars.meta_value;
            if(homePagePost.posts.length > 0){
                homePagePost.posts.map(( post, i ) => {
                    let postID = post.ID;
                    let postURl = post.guid;
                    $.post(ajax_url, {
                    action: "av_get_post_data_by_id",
                    id: postID
                    }, function(resp){
                        //console.log(resp, screenID);
                        resp = JSON.parse(resp);
                        let data = ''+
                        '<div class="mySlides fade">'+
                            '<a href="'+postURl+'">'+
                                '<img src="'+resp.image+'" style="width:100%">'+
                                '<div class="text">'+resp.title+'</div>'+
                            '</a>'+
                        '</div>';
                        $(".home-screen-thumb-container #"+screenID).append(data);

                    });
                } );
            }
        });
        //console.log(homePagePosts);
    }


function showSlides() {
    var i;
    var slides = document.getElementsByClassName("mySlides");
    //var slides = $(".home-screen-thumb-container").find(".mySlides");
    console.log(slides);
    for (i = 0; i < slides.length; i++) {
       slides[i].style.display="none";  
    }
    slideIndex++;
    if (slideIndex > slides.length) {slideIndex = 1}  

    slides[slideIndex-1].style.display = "block";  
    setTimeout(showSlides, 2000); // Change image every 2 seconds
}
});

这里我无法选择 div mySlidesshowSlides()

最佳答案

在您调用 showSlides() 时,您的其他函数 avHomePageThumbnails() 尚未完成其(异步)ajax 调用。

您的解决方案是从 ajax 调用 ($.post()) 中调用 showSlides() 其回调函数(在添加 div 的部分之后) 。或者(更好),让 avHomePageThumbnails() 返回一个 Promise,并在 Promise 完成后调用 showSlides()

此处对 Promise 的快速介绍: https://developers.google.com/web/fundamentals/primers/promises

关于javascript - 无法选择 Javascript 附加的 HTML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52429779/

相关文章:

javascript - Android WebView loadUrl 并添加脚本

java - 如何做一个随机且唯一的生成器?

c++ - 为什么 const char *foo = "Hello";编译但不编译 const int *foo = 5;?

javascript - 我如何才能通过

javascript - 在 ReactJs 中使用 Javascript 进行类操作

javascript - 使用 Javascript 更改元素的焦点处理程序?

javascript - 在 Google Chrome 中禁用 Alt 功能(快捷方式)

javascript - 我正在尝试在我的 JavaScript 代码中正确实现 CORS,并且它工作了一段时间,我相信我丢失了项目中的某些文件?

jquery - JQuery 对话框内包含表单的部分 View 中的输入无响应

c - 为什么我得到 0 作为输出?你能找出错误吗?