javascript - jQuery 在单击时获取数据属性不起作用

标签 javascript jquery html

我有一个脚本将附加到我的网络应用程序上的两个位置。一个是列表项,另一个是 HTML 表单上的隐藏字段(我在 PHP 服务文件中处理数据)。

但是,我希望如果用户单击“x”图标,则所有具有相同 ID 的元素都会被删除。

我很清楚如何做到这一点,但我下面的脚本甚至没有记录 ID。 .control block 给了我这个问题。 #add 代码块成功附加了 HTML。

我是否遗漏了一些明显的东西?

$("#add").click(function() {

    // RENDER LIST
    var playerList = ""; //
    playerList += "<li class='selection'>" + $("#player").val() + "<i class='fa fa-close control' data-id='" + $("#playerGUID").val() + "'> </i>" + "</li>";

    $(playerList).appendTo("#playerList");

    // ADD GUID TO SUBMISSION VALUES
    var playerHTML = "";
    playerHTML += "<input data-id='" + $("#playerGUID").val() + "' type='hidden' name='playerGUID[]' value='" + $("#playerGUID").val() + "' />";

    $(playerHTML).appendTo("#selected-players");

    // CLEAR INPUT FIELD
    $("#player").val('');
});

$(".control").click(function() {
    $targetID = $(this).attr('data-id');
    console.log("Selected ID:" + $targetID);

    // REMOVE WILL COME HERE
});

最佳答案

$(".control") 在您绑定(bind)点击事件时不存在。您需要像这样委托(delegate)事件:

$(document).on("click", ".control", function() {
    $targetID = $(this).attr('data-id');
    console.log("Selected ID:" + $targetID);
   // REMOVE WILL COME HERE
});

这里发生的情况是,jQuery 将在文档上绑定(bind)一个监听器(该文档始终存在),而不是 .control,直到您通过单击 # 创建它之后,该监听器才会存在。添加。这样,即使元素本身是稍后添加的,也可以捕获具有 control 类的元素上的事件。

检查jQuery.on直接事件和委托(delegate)事件下了解更多详细信息。

注意:您可以将事件绑定(bind)到将成为 .control 父级的任何元素上,而不是使用 $(document) ,并且当您绑定(bind)事件时可用(例如 body)。理想情况下,您希望将其绑定(bind)到加载文档时出现的最近的父元素。

关于javascript - jQuery 在单击时获取数据属性不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37255922/

相关文章:

javascript - array.some() 方法的替代方法?

javascript复选框选中所有

javascript - 如何在 Python selenium webdriver 中点击 HTML5 Canvas 上的一个点

html - 图像未居中,文本对齐 :center

javascript - 在 for 循环中生成 .click 函数

javascript - 当以不允许的字符开始时,使用正则表达式仅允许 HTML 输入字段中的某些字符似乎不起作用

javascript - 如何发布 angular2 指令

javascript - 如何防止选择相同的选项值

jquery - xhr.status 为 8 在 IE8 中意味着什么?

html - CSS 中的最小高度在 Firefox 中不起作用。它在 IE 中工作