javascript - 为什么我不能在 JQuery 中选择一个用 $.get 加载的元素

标签 javascript jquery

<分区>

我有一系列从 JSON 加载的按钮,它们依次消失并在点击时附加其他按钮。

像这样(第一级按钮已经在页面上并且对悬停等其他事件做出正确 react ):

    ...
     $(document).on('click', "#subcategoryButtons button", function () {
            getTemplate('imgMenu.html');
            var entryIndex = this.id[0];
            var subentryIndex;
            if (this.id[1] === '0')
            {
                subentryIndex = this.id.slice(-1);
            }
            else
            {
                subentryIndex = this.id.slice(-2);
            }
            var imgs = data.category[entryIndex].subcategory[subentryIndex].imgs;
            $.each(imgs, function (imgIndex)
            {
                var imgName = data.category[entryIndex].subcategory[subentryIndex].imgs[imgIndex].imgName;
                var imgId = data.category[entryIndex].subcategory[subentryIndex].imgs[imgIndex].imgId;
                $('#imgButtons span').append('<button id="' + imgId + '">' + imgName + '</button>');
            });
        });
    }
    ;
...

这是正在加载的模板内容:

<div id="imgSpace">
    <aside id="overlayRight">
        Right Overlay space
    </aside>
    <div id="overlayBottom">
        Bottom Overlay
    </div>
</div>
<nav id="imgButtons" class="resizable">
    <span></span>
</nav>

这是 getTemplate 代码:

function getTemplate(templateUrl)
    {
        $.get('templates/' + templateUrl, function (content)
        {
            if (templateUrl === 'leftMenu.html')
            {
                $('#leftMenu').html(content);
            }
            else
            {
                $('#main').html(content);
            }
        });
    }

即使它应该将按钮附加到#imgButtons 范围,它似乎也无法选择刚刚加载的模板中的任何元素。如果我尝试将按钮附加到页面的另一部分(比如最近未加载的左侧菜单),或者我只是简单地清除主菜单中的 HTML 而不是获取模板,附件就可以工作。所以看来问题是如何选择已加载的元素。任何帮助将不胜感激。

感谢所有为我指明正确方向的人。最后我没有使用 Ajax,而是像这样 deferred.done:

 $(document).on('click', "#subcategoryButtons button", function () {
            var entryIndex = this.id[0];
            var subentryIndex;
            if (this.id[1] === '0') {
                subentryIndex = this.id.slice(-1);
            } else {
                subentryIndex = this.id.slice(-2);
            }
            var imgs = data.category[entryIndex].subcategory[subentryIndex].imgs;
            $('main').html('');
            $.get("templates/imgMenu.html", function (content)
            {
                $('#main').html(content);
            }).done(function () {
                $.each(imgs, function (imgIndex) {
                    var imgName = data.category[entryIndex].subcategory[subentryIndex].imgs[imgIndex].imgName;
                    var imgId = data.category[entryIndex].subcategory[subentryIndex].imgs[imgIndex].imgId;
                console.log(entryIndex);
                $('#imgButtons span').append('<button id="' + imgId + '">' + imgName + '</button>');
                });
            });
        });
    }
    ;

最佳答案

您使用了错误的选择器 #imgButtons button 应该是 #imgButtons span 来选择 #imgButtons 中的 span

此外,您的模板是异步加载的,因此您必须等到它加载完毕(通过回调函数)才能对其进行操作。像

 $(document).on('click', "#subcategoryButtons button", function () {
        getTemplate('imgMenu.html', callback);
        function callback(){
            var entryIndex = this.id[0];
            var subentryIndex;
            if (this.id[1] === '0')
            {
                subentryIndex = this.id.slice(-1);
            }
            else
            {
                subentryIndex = this.id.slice(-2);
            }
            var imgs = data.category[entryIndex].subcategory[subentryIndex].imgs;
            $.each(imgs, function (imgIndex)
            {
                var imgName = data.category[entryIndex].subcategory[subentryIndex].imgs[imgIndex].imgName;
                var imgId = data.category[entryIndex].subcategory[subentryIndex].imgs[imgIndex].imgId;
                $('#imgButtons span').append('<button id="' + imgId + '">' + imgName + '</button>');
            });
        }
    });
    ...
function getTemplate(templateUrl, callback)
{
    $.get('templates/' + templateUrl, function (content)
    {
        if (templateUrl === 'leftMenu.html')
        {
            $('#leftMenu').html(content);
        }
        else
        {
            $('#main').html(content);
        }
        callback();
    });
}

关于javascript - 为什么我不能在 JQuery 中选择一个用 $.get 加载的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26316167/

相关文章:

javascript - JQuery - 获取当前单元格正上方单元格的值

javascript - Invisible recaptcha是可见的

javascript - 如何完成JavaScript验证

JQuery 模拟

javascript - jquery fade() 不褪色

javascript - 使用 JavaScript/jQuery 实时附加到 URI/URL 而无需刷新页面位置

javascript - 使用 dc.js、d3.js 和 crossfilter 的引用错误

javascript - 如何继续使用实时本地网站

javascript - Laravel 使用 Ajax 从购物车中删除

javascript - 即时替换 css 文件(并将新样式应用于页面)