类更改后JQuery单击事件无法正常工作
我有类似这样的JQuery脚本:
$('.follow_link').click(function(){ // Do some stuff $(this).removeClass(); $(this).addClass("unfollow_link"); }); $('.unfollow_link').click(function(){ // Do some stuff $(this).removeClass(); $(this).addClass("follow_link"); });
我的问题是,在我更改类之后,链接仍然引用它的旧类’click事件。 有没有重新绑定的方法? 或者我这样做是不是很糟糕?
你可以使用这两个函数1:
$('.unfollow_link, .follow_link').live("click", function(){ $(this).toggleClass("follow_link unfollow_link"); });
请参阅toggleClass和live函数
.toggleClass(className) className要为匹配集中的每个元素切换一个或多个类名(由空格分隔)。
编辑新的jQuery版本1.6.4+
由于live
function不再存在,这里有一个替代品:
$('body').on("click", '.unfollow_link, .follow_link', function(){ $(this).toggleClass("follow_link unfollow_link"); });
问题是jQuery的工作原理是选择元素(这就是$('.follow_link')
作用),然后将事件处理程序绑定到那些元素(这就是.click*function(){
$('.follow_link')
。)。 如果class级改变也没关系。
Javascript有一个名为event bubbling的function。 这意味着祖先元素会被告知其后代的事件。 这意味着您可以在事件发生时测试选择器,而不是文档就绪。
使用on
函数,jQuery使这很简单:
$(document.body).on('click', '.follow_link', function(){ // Do some stuff $(this).removeClass(); $(this).addClass("unfollow_link"); }).on('click', '.unfollow_link', function(){ // Do some stuff $(this).removeClass(); $(this).addClass("follow_link"); });
请注意,此函数是在jQuery 1.7中引入的。 为了与先前版本兼容,请使用delegate
。
最好给每个链接指定一个第三类,指定它们是一个组的一部分。 像a_link
这样的a_link
:
$('.a_link').bind('click', function () { $(this).toggleClass('follow_link unfollow_link'); });
注意:我刚刚遇到这个问题,即使on()
函数仍然存在JQuery 1.10的问题,
实际上我通过替换解决了这个问题:
$('.unfollow_link, .follow_link').live("click", function(){ $(this).toggleClass("follow_link unfollow_link"); });
通过
$(document).on('click','.unfollow_link, .follow_link', function(){ $(this).toggleClass("follow_link unfollow_link"); });
尝试:
$('.follow_link, .unfollow_link').click(function() { newclass = $(this).hasClass('follow_link') ? 'unfollow_link' : 'follow_link'; $(this).removeClass().addClass(newclass) });
编辑:尼尔斯的解决方案更好。