Javascript jquery.click()事件的奇怪行为
我想我正在尝试做一件简单的事情,但可能我错过了一些东西。 我有一个小小的HTMLJavascript jquery.click()事件的奇怪行为,javascript,jquery,Javascript,Jquery,我想我正在尝试做一件简单的事情,但可能我错过了一些东西。 我有一个小小的HTML <div class="open"> OPEN</div> 现在我想捕捉div上的.click()事件,但我想用类选择器选择。 第二步,我需要更改该类,并根据该类再次捕获不同的.click()事件。所以我使用了JQuery代码: $('.open').click(function() { alert('open'); $(this).removeClass('open'); $
<div class="open"> OPEN</div>
现在我想捕捉div上的.click()事件,但我想用类选择器选择。
第二步,我需要更改该类,并根据该类再次捕获不同的.click()事件。所以我使用了JQuery代码:
$('.open').click(function() {
alert('open');
$(this).removeClass('open');
$(this).addClass('close');
$(this).text('CLOSE');
});
$('.close').click(function() {
alert('close');
$(this).removeClass('close');
$(this).addClass('open');
$(this).text('OPEN');
});
但这不起作用:
- 第一次单击:右警报、类更改、文本更改
- 第二次单击:错误警报、类未更改、文本未更改
谢谢您只需使用以下工具即可完成此操作:
$('.open')。单击(函数(){
var txt=$.trim(this.textContent)=“打开”?“关闭”:“打开”;
$(this.toggleClass('open').text(txt);
//$(this).toggleClass('open-close').text(txt);
//如果要在每次单击时切换类,请使用注释行。
});代码>
。打开{
颜色:绿色;
}
.结束{
颜色:红色;
}
打开
,您只需使用以下工具即可完成此操作:
$('.open')。单击(函数(){
var txt=$.trim(this.textContent)=“打开”?“关闭”:“打开”;
$(this.toggleClass('open').text(txt);
//$(this).toggleClass('open-close').text(txt);
//如果要在每次单击时切换类,请使用注释行。
});代码>
。打开{
颜色:绿色;
}
.结束{
颜色:红色;
}
打开
,您只需使用以下工具即可完成此操作:
$('.open')。单击(函数(){
var txt=$.trim(this.textContent)=“打开”?“关闭”:“打开”;
$(this.toggleClass('open').text(txt);
//$(this).toggleClass('open-close').text(txt);
//如果要在每次单击时切换类,请使用注释行。
});代码>
。打开{
颜色:绿色;
}
.结束{
颜色:红色;
}
打开
,您只需使用以下工具即可完成此操作:
$('.open')。单击(函数(){
var txt=$.trim(this.textContent)=“打开”?“关闭”:“打开”;
$(this.toggleClass('open').text(txt);
//$(this).toggleClass('open-close').text(txt);
//如果要在每次单击时切换类,请使用注释行。
});代码>
。打开{
颜色:绿色;
}
.结束{
颜色:红色;
}
打开
您需要为此进行事件委派。因为在一开始,类close没有div,所以click处理程序没有赋值
把你的头发包起来
打开
并将单击处理程序分配给主div
$('.wrapper').on("click", ".open",function() {
alert('open');
$(this).removeClass('open');
$(this).addClass('close');
$(this).text('CLOSE');
});
$('.wrapper').on("click", ".close",function() {
alert('close');
$(this).removeClass('close');
$(this).addClass('open');
$(this).text('OPEN');
});
而不是$(this.removeClass('close')$(本节)。addClass(“打开”)代码>您考虑使用<代码> $(this)。toggleClass(“打开关闭”);<代码>
为此,您需要事件委派。因为在一开始,类close没有div,所以click处理程序没有赋值
把你的头发包起来
打开
并将单击处理程序分配给主div
$('.wrapper').on("click", ".open",function() {
alert('open');
$(this).removeClass('open');
$(this).addClass('close');
$(this).text('CLOSE');
});
$('.wrapper').on("click", ".close",function() {
alert('close');
$(this).removeClass('close');
$(this).addClass('open');
$(this).text('OPEN');
});
而不是$(this.removeClass('close')$(本节)。addClass(“打开”)代码>您考虑使用<代码> $(this)。toggleClass(“打开关闭”);<代码>
为此,您需要事件委派。因为在一开始,类close没有div,所以click处理程序没有赋值
把你的头发包起来
打开
并将单击处理程序分配给主div
$('.wrapper').on("click", ".open",function() {
alert('open');
$(this).removeClass('open');
$(this).addClass('close');
$(this).text('CLOSE');
});
$('.wrapper').on("click", ".close",function() {
alert('close');
$(this).removeClass('close');
$(this).addClass('open');
$(this).text('OPEN');
});
而不是$(this.removeClass('close')$(本节)。addClass(“打开”)代码>您考虑使用<代码> $(this)。toggleClass(“打开关闭”);<代码>
为此,您需要事件委派。因为在一开始,类close没有div,所以click处理程序没有赋值
把你的头发包起来
打开
并将单击处理程序分配给主div
$('.wrapper').on("click", ".open",function() {
alert('open');
$(this).removeClass('open');
$(this).addClass('close');
$(this).text('CLOSE');
});
$('.wrapper').on("click", ".close",function() {
alert('close');
$(this).removeClass('close');
$(this).addClass('open');
$(this).text('OPEN');
});
而不是$(this.removeClass('close')$(本节)。addClass(“打开”)代码>您考虑使用<代码> $(this)。toggleClass(“打开关闭”);<代码>
试试这个
$('.general').click(function() {
var status = $(this).attr('data-status');
if(status == 'open') {
alert('open');
$(this).removeClass('open');
$(this).addClass('close');
$(this).text('CLOSE');
$(this).attr('data-status', 'close');
} else if(status == 'close') {
alert('close');
$(this).removeClass('close');
$(this).addClass('open');
$(this).text('OPEN');
$(this).attr('data-status', 'open');
}
});
然后将类应用于div
<div class="open general" data-status='open'> OPEN</div>
打开
试试这个
$('.general').click(function() {
var status = $(this).attr('data-status');
if(status == 'open') {
alert('open');
$(this).removeClass('open');
$(this).addClass('close');
$(this).text('CLOSE');
$(this).attr('data-status', 'close');
} else if(status == 'close') {
alert('close');
$(this).removeClass('close');
$(this).addClass('open');
$(this).text('OPEN');
$(this).attr('data-status', 'open');
}
});
然后将类应用于div
<div class="open general" data-status='open'> OPEN</div>
打开
试试这个
$('.general').click(function() {
var status = $(this).attr('data-status');
if(status == 'open') {
alert('open');
$(this).removeClass('open');
$(this).addClass('close');
$(this).text('CLOSE');
$(this).attr('data-status', 'close');
} else if(status == 'close') {
alert('close');
$(this).removeClass('close');
$(this).addClass('open');
$(this).text('OPEN');
$(this).attr('data-status', 'open');
}
});
然后将类应用于div
<div class="open general" data-status='open'> OPEN</div>
打开
试试这个
$('.general').click(function() {
var status = $(this).attr('data-status');
if(status == 'open') {
alert('open');
$(this).removeClass('open');
$(this).addClass('close');
$(this).text('CLOSE');
$(this).attr('data-status', 'close');
} else if(status == 'close') {
alert('close');
$(this).removeClass('close');
$(this).addClass('open');
$(this).text('OPEN');
$(this).attr('data-status', 'open');
}
});
然后将类应用于div
<div class="open general" data-status='open'> OPEN</div>
打开
问题在于事件处理程序绑定到HTML元素。在这种情况下,使用
否关闭或打开类。因此,当您单击div only时,使用警报(“opne”)
触发处理程序
解决方案是:只使用一个处理程序,并在其中放置一个“if”语句。在伪代码中:
if class open
do someting
else if class close
do someting
问题是事件处理程序绑定到HTML元素。在这种情况下,使用
否关闭或打开类。因此,当您单击div only时,使用警报(“opne”)
触发处理程序
解决方案是:只使用一个处理程序,并在其中放置一个“if”语句。在伪代码中:
if class open
do someting
else if class close
do someting
问题是事件处理程序绑定到HTML元素。在这种情况下,使用
否关闭或打开类。因此,当您单击div only时,使用警报(“opne”)
触发处理程序
解决方案是:只使用一个处理程序,并在其中放置一个“if”语句。在伪代码中:
if class open
do someting
else if class close
do someting
问题是事件处理程序绑定到HTML元素。在这种情况下,使用
否关闭或打开类。因此,当您单击div only时,使用警报(“opne”)
触发处理程序
解决方案是:只使用一个处理程序,并在其中放置一个“if”语句。在伪代码中:
if class open
do someting
else if class close
do someting
我说得对吗,您永远不会删除打开的类-因此单击处理程序始终可用-您只需通过切换添加关闭类-因此div有class=“open”或class=“open-close”,这可能会带来新问题,如果您有几个打开/关闭div,并且希望以不同的方式处理它们…@errad yes这应该可以。另一种方法是这样使用.toggleClass('open-close')
。@errad这就是为什么使用$(this)
。我知道$(this)的用法-但是