[英]jQuery get data attribute on click not working
我有一个脚本,它将追加到Web应用程序的两个位置。 一个是列表项,另一个是HTML表单(我处理PHP服务文件中的数据)上的隐藏字段。
但是,我希望如果用户单击“ x”图标,将删除所有具有相同ID的元素。
我有一个很好的主意,但我下面的脚本甚至没有记录ID。 .control
块给了我这个问题。 #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
});
绑定click事件时, $(".control")
不存在。 您将需要像这样委派事件:
$(document).on("click", ".control", function() {
$targetID = $(this).attr('data-id');
console.log("Selected ID:" + $targetID);
// REMOVE WILL COME HERE
});
这里发生的是,jQuery将绑定在文档(它总是存在)的监听器,而不是.control
,直到你通过点击到创建它,这将不存在#add
。 这样一来,即使元素本身是在以后添加的,if也可以通过类control
来捕获元素上的事件。
有关更多详细信息,请在“ 直接事件和委托事件”下检查jQuery.on 。
注意:可以将事件绑定到任何将成为.control
父元素的元素上,而不是使用$(document)
,并且在绑定事件时可用(例如body
)。 理想情况下,您希望将其绑定到文档加载时出现的最接近的父元素。
您正在使用的click()
绑定称为直接绑定,它将仅将处理程序附加到已经存在的元素上。 它不会绑定到以后创建的元素。 为此,您必须使用on()
方法创建“委托”绑定。
例如。
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
</head>
<body>
<div id="playerList">playerList</div>
<div id="selected-players">selected-players</div>
<a href="#" id="add">Add</a>
<script>
$(document).ready(function(){
$("#add").click(function() {
// RENDER LIST
var playerList = ""; //
playerList += "<li class='selection'>Dynamic LI " + $("#player").val() + "<i class='fa fa-close control' data-id='sample-data-id " + $("#playerGUID").val() + "'> <b>iVal-Click Here</b> </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('');
});
$("#playerList").on("click", ".control", function() {
$targetID = $(this).attr('data-id');
console.log("Selected ID:" + $targetID);
// REMOVE WILL COME HERE
});
});
</script>
</body>
</html>
试试.on
绑定的事件代替.click
$(".control").on("click",function() {
$targetID = $(this).attr('data-id');
console.log("Selected ID:" + $targetID);
// REMOVE WILL COME HERE
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.