Jquery 我看到旧类了吗
我有这个:Jquery 我看到旧类了吗,jquery,ajax,Jquery,Ajax,我有这个: $(".follow").click(function() { var element = $(this); var id = element.attr("id"); var data = "id=" + id; $.ajax({ type: "POST", url: "follow.php", data: data, su
$(".follow").click(function() {
var element = $(this);
var id = element.attr("id");
var data = "id=" + id;
$.ajax({
type: "POST",
url: "follow.php",
data: data,
success: function(result) {
element.removeClass("follow");
element.addClass("unfollow");
}
});
return false;
});
$(".unfollow").click(function() {
alert("Hey, dude");
});
当我点击我的按钮时,我可以看到Firebug的类开关。但是如果我再次尝试单击该按钮,它不会显示警报,脚本总是向follow.php发送POST请求
为什么?您需要使用而不是。单击(…)
。前者适用于现在和将来匹配该选择器的所有元素,而后者仅适用于现在匹配该选择器的元素
这不是ajax“看到”旧类的问题,而是事件侦听器的绑定方式$(“.follow”)。单击(回调)
查找DOM中具有类follow
的所有元素,然后将callback
绑定到每个此类元素的click
事件。删除follow
类不会删除事件侦听器
.live()
也只绑定一个监听器,而不是jQuery对象中的每个元素绑定一个监听器,因此它在这方面更“高效”(阅读:轻量级)
$(".follow").live("click", function() {
var element = $(this),
data = "id=" + this.id;
$.ajax({
type: "POST",
url: "follow.php",
data: data,
success: function(result) {
element.removeClass("follow").addClass("unfollow");
}
});
return false;
});
$(".unfollow").live("click", function() {
alert("Hey, dude");
});
笔记
- 您可以而且应该使用
而不是this.id
)。看$(this.attr(“id”)
- 利用jQuery的可链接性获得更高效、简洁的代码
非常感谢你,伙计。你动摇了我们的船。也谢谢你的笔记!