javascript - jQuery - Data() 属性返回未定义

标签 javascript jquery local-storage custom-data-attribute

我有一个脚本,可以附加一段 HTML 10 次

$('#main').append(`
<div id="box${i}" class="divMusica">

    <div class="todas">

    <img  id= "img${i}" src="">

    </div>

    <div class="divTexto">

        <h2>Nome da banda: <p id="banda${i}"></p></h2>

        <h2>Nome da música: <p id="musica${i}"></p></h2>

        <a class="referencia" id ="url${i}" href="" target="_blank" class="button">Ir para last.fm </a>

        <button button type="button" class="add-music-button" data-ref="${i}" onclick="add_to_storage()">Adicionar</button>

    </div>

</div>`);

我正在尝试使用此代码将数据引用获取到 sessionStorage let musicRef = $(this).data("ref"); 但它返回 undefined.有人能告诉我为什么吗?我已经尝试将 ${i} 也放在不带引号的位置。

最佳答案

您正尝试在 DOM 注册此元素之前使用 Javascript 函数 append() 添加 HTML

您无法为此应用正常的 onclick 事件。您必须进行事件委托(delegate)。然后您将能够捕获它的 idclass

此事件处理程序绑定(bind)到 DOM 树(在本例中为文档)上方的元素,并且当事件到达源自与选择器匹配的元素的该元素时将执行。

请参阅此答案以了解其中的区别。 Link

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="main"></div>
    <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
    <script>
        let i = 1;
        $('#main').append(`
            <div id="box${i}" class="divMusica">
                <div class="todas">
                <img  id= "img${i}" src="">
                </div>
                <div class="divTexto">
                    <h2>Nome da banda: <p id="banda${i}"></p></h2>
                    <h2>Nome da música: <p id="musica${i}"></p></h2>
                    <a class="referencia" id ="url${i}" href="" target="_blank" class="button">Ir para last.fm </a>
                    <button button type="button" class="add-music-button" data-ref="${i}" id="clickButtonID${i}">Adicionar</button>
            </div>
        </div>`);

        $(document).on('click', '#clickButtonID' + i, function(){
            alert($(this).data("ref"));
        })
    </script>
</body>
</html>

关于javascript - jQuery - Data() 属性返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65964587/

相关文章:

javascript - 如何用localStorage制作 “Mark as Read”?

javascript - 如何在 java 脚本对象 ES5 中分组和合并

javascript - 如何显示像 stackoverflow 这样的对话框?

javascript - 我的自定义指令中未定义 Controller ngModel

javascript - 使用 HTML5/Flash 录制和上传(到服务器)音频

javascript - 将 css 背景设置为本地存储中的图像

javascript - Div 类型 ="hidden"+ 未隐藏

javascript - 输入 :radio click function isn't triggering in IE/Firefox

javascript - 如何从javascript数组中选择特定字段

javascript - 使用 HTML5 localstorage 更新 json 键的值