我试图添加一个'这个'当你点击一个li时,当你点击一个带有'。这个'它不起作用。
即使我使用.on方法,它也不起作用。我错过了什么?这让我发疯了。
var thisLi = $('ul li');
$('li').on('click', function() {
$(thisLi).removeClass('that');
$(thisLi).removeClass('this');
$(this).addClass('this');
});
$('li.this').on("click", "li.this", function() {
$(this).addClass('that');
});
答案 0 :(得分:1)
使用事件委托。因为正常事件绑定不会将事件绑定到将来的元素。为此,您需要将事件绑定到特定父级。我在这里使用document
$(document).on("click", "li.this", function() {
$(this).addClass('that');
});
答案 1 :(得分:0)
这个snipplet应该可以解决问题。
首先,您需要获取ul
元素 - 以避免搜索shole DOM for ul。
其次,您在其click
元素上应用 var thisLi = $('ul li');
var list = $('ul');
list.on('click','li', function() {
$(thisLi).removeClass('that');
$(thisLi).removeClass('this');
$(this).addClass('this');
});
list.on('click','li.this', function() {
$(this).addClass('that');
});
事件:)
{{1}}
答案 2 :(得分:0)
试试这个:
var thisLi = $('ul');
$('li').on('click', function() {
$(thisLi).removeClass('that');
$(thisLi).removeClass('this');
$(this).addClass('this');
});
$(thisLi).on("click","li.this", function() {
$(this).addClass('that');
});
答案 3 :(得分:0)
你可以做那样的事情:
var thisLi = $('ul li');
$('li').on('click', function() {
if(this.className!=='this'){
$(thisLi).removeClass('that');
$(thisLi).removeClass('this');
$(this).addClass('this');
}else{
$(this).addClass('that');
}
});
答案 4 :(得分:0)
当事件直接发生在绑定元素上时,不会调用处理程序,但仅适用于后代(内部元素)
当你改变这个
时它会起作用$('li.this').on("click", "li.this", function()
到此:
$(document).on("click", "li.this", function()
在此逻辑中,您实际上确定了可以发生click
事件的范围。如果您使用$('li.this').on()
,则仅针对click
的后代考虑li.this
个事件,但li.this
不存在后代。
答案 5 :(得分:0)
我认为问题在于,当你点击this.li时,它会触发这两个函数,首先删除类,然后不执行因为类已经消失。
我把它重写为一个函数,它执行类检查而不是单独的函数。我真的不喜欢这个,但是如果你被困住它会让你去。
$('li').on('click', function() {
if ($(this).hasClass('that')) {
$(this).removeClass('that');
} else if ($(this).hasClass('this')) {
$(this).addClass('that');
$(this).removeClass('this');
} else {
$(this).addClass('this');
}
});
这是一个工作小提琴 - http://jsfiddle.net/zfda8145/24/