javascript - 单击时,如果有类则发出警报,否则添加类问题

标签 javascript jquery

出于某种原因,下面的代码同时触发这两个条件;

所以首先我的 li 没有类,然后单击时添加了“disabled”类,但第一次单击时也会弹出警报?

    $('.select li').on( "click", function() {
    if ( $(this).hasClass('disabled') ) {
      alert("This is disabled");
    }
    else {
      $(this).addClass('disabled');
    }   
    });

如果第一次单击时该类尚不存在,则应添加该类,然后,如果再次单击,则应弹出警报,表明此 li 已禁用该类

最佳答案

我认为您的事件监听器被触发两次,因为单击事件首先触发了 <li> ( e.target ),然后事件返回到 ul.select (e.currentTarget)。您需要将点击事件委托(delegate)给列表,并在事件数据参数中指定li 。查看演示

演示

$('.select').on('click', 'li', disableItem);

function disableItem(e) {
  if ($(this).hasClass('disabled')) {
    return console.log('Item is already disabled');
  } else {
    $(this).addClass('disabled');
    return console.log('Item has been disabled');
  }
};
.select {
  list-style: none
}

.select li {
  line-height: 1.5;
}

.disabled {
  background: rgba(0, 0, 0, 0.2);
}

.as-console-wrapper {
  width: 350px;
  min-height: 100%;
  margin-left: 45%;
}

.as-console-row.as-console-row::after {
  content: '';
  padding: 0;
  margin: 0;
  border: 0;
  width: 0;
}
<ul class='select'>
  <li>ITEM</li>
  <li>ITEM</li>
  <li>ITEM</li>
  <li>ITEM</li>
  <li>ITEM</li>
  <li>ITEM</li>
  <li>ITEM</li>
  <li>ITEM</li>
  <li>ITEM</li>
  <li>ITEM</li>
  <li>ITEM</li>
  <li>ITEM</li>
  <li>ITEM</li>
  <li>ITEM</li>
  <li>ITEM</li>
  <li>ITEM</li>
</ul>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

关于javascript - 单击时,如果有类则发出警报,否则添加类问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54094725/

相关文章:

从选择框调用 jquery ajax

javascript - 有没有办法检测溢出 y :auto has been triggered, 并因此创建弹出窗口?

javascript - jQuery:如何绑定(bind)同一类的多个元素?

javascript - 获取div的顶部位置

jquery - Shim 命令在 RequireJS 中工作

C# ASP.net Razor AJAX 调用方法不起作用

jQuery 在 Anchor 上添加和删除类

javascript - 单击表头时对表中的行进行排序

javascript - for 循环后解析数组后未定义

javascript - 如果 Web 浏览器是 IE,请在 JavaScript 中执行某些操作