我用这个循环创建了几个包含元素的 div。我希望能够将点击事件附加到具有“linky”类的每个链接,并且此链接将读取 contentID 属性。
我一直在寻找,找到在动态创建的元素中使用选择器的案例,但不适用于我的案例。有什么建议吗?
for (i = 0; i < msg.length; i++) {
var htmlCode = "<a href='/Controller/Details/" + msg[i].ID + "' style = 'float: left;'><img class='packageImage' border='0' src='" + msg[i].Size0Path + "' /></a>";
htmlCode += "<span style='float: left;margin: 5px 0px 0px 10px;'>" + "<b>" + msg[i].TheName + "</b><br>";
if (msg[i].IsPaused == true) {
htmlCode += "<a href='#bar' class=linky contentID='" + msg[i].ID + "'>Resume</a>";
} else {
htmlCode += "<a href='#bar' class=linky contentID='" + msg[i].ID + "'>Pause</a>";
}
htmlCode += "</span>";
htmlCode += "<div class='clear'></div>";
$("#divContent").append(htmlCode);
}
鉴于答案,我正在尝试将事件附加到 linky 类,但我只是不确定在哪里,请参阅下面的更多详细信息,我的说明是根据 ajax 提交(发布)的结果创建动态元素。
success: function (msg) {
$("body").on("click", "a.linky", function () {
alert($(this).attr("contentID"));
});
for (i = 0; i < msg.length; i++) {
var htmlCode = "<a href='/Controller/Details/" + msg[i].ID + "' style = 'float: left;'><img class='packageImage' border='0' src='" + msg[i].Size0Path + "' /></a>";
htmlCode += "<span style='float: left;margin: 5px 0px 0px 10px;'>" + "<b>" + msg[i].TheName + "</b><br>";
if (msg[i].IsPaused == true) {
htmlCode += "<a href='#bar' class=linky contentID='" + msg[i].ID + "'>Resume</a>";
} else {
htmlCode += "<a href='#bar' class=linky contentID='" + msg[i].ID + "'>Pause</a>";
}
htmlCode += "</span>";
htmlCode += "<div class='clear'></div>";
$("#divContent").append(htmlCode);
}
}
最佳答案
使用 on
的委托(delegate)形式:
$("body").on("click", "a.linky", function() {
alert($(this).attr("contentID"));
});
在创建任何动态内容之前,您只需执行一次。它会将事件处理程序附加到 <body>
将响应其满足 a.linky
的任何后代选择器被点击。这些元素在您附加处理程序时是否已经在 DOM 中,或者它们是否稍后添加都没有关系。
关于javascript - 如何从创建自.Append 函数的动态元素中使用 JQuery 选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12657395/