Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery.click()事件的奇怪行为_Javascript_Jquery - Fatal编程技术网

Javascript jquery.click()事件的奇怪行为

Javascript jquery.click()事件的奇怪行为,javascript,jquery,Javascript,Jquery,我想我正在尝试做一件简单的事情,但可能我错过了一些东西。 我有一个小小的HTML <div class="open"> OPEN</div> 现在我想捕捉div上的.click()事件,但我想用类选择器选择。 第二步,我需要更改该类,并根据该类再次捕获不同的.click()事件。所以我使用了JQuery代码: $('.open').click(function() { alert('open'); $(this).removeClass('open'); $

我想我正在尝试做一件简单的事情,但可能我错过了一些东西。 我有一个小小的HTML

<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');
});
但这不起作用:

  • 第一次单击:右警报、类更改、文本更改
  • 第二次单击:错误警报、类未更改、文本未更改
您可以检查此JSFIDLE:

你能帮我吗?
谢谢

您只需使用以下工具即可完成此操作:

$('.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)的用法-但是