我正在为我的应用中的个人资料开发+关注功能。关注功能只能运行一次(在新页面加载时),但在脚本替换DOM元素后,它不起作用。
当用户跟踪不个人资料时的HTML输出:
<div id="follow">
<a>Follow profile</a>
</div>
HTML输出当用户当前跟随个人资料时:
<div id="unfollow">
<a>Unfollow profile</a>
</div>
魔法发生在jQuery中。以下函数包含在$(document).ready()
函数中:
function follow() {
$("#follow a").on("click", function() {
// $.getJSON fn here that follows profile and returns success T/F
if ( success ) {
$("#follow").remove();
$("#follow-container").html('<div id="unfollow"><a>Unfollow profile</a></div>');
}
});
$("#unfollow a").on("click", function() {
// $.getJSON fn here that unfollows profile and returns success T/F
if ( success ) {
$("#unfollow").remove();
$("#follow-container").html('<div id="follow"><a>Follow profile</a></div>');
}
});
}
假设用户点击“关注个人资料”。该脚本会删除#follow a
链接,并将其替换为#unfollow a
链接。但是,单击#unfollow a
时运行的JS脚本不会执行,因为在页面加载后该元素已添加到DOM中。
为了解决这个问题,我尝试刷新这样的功能:
if ( success ) {
$("#follow").remove();
$("#follow-container").html('<div id="unfollow"><a>Unfollow profile</a></div>');
// reload function
follow();
}
这不起作用。取消关注点击事件未注册。在这种情况下,如何重新加载DOM?
答案 0 :(得分:7)
使用事件委托 -
$("#follow-container").on("click","#follow a", function() {
和
$("#follow-container").on("click","#unfollow a", function() {
另外:你这里有一个拼写错误 $(#follow-container")
这应该是$("#follow-container")