javascript - 单击时,如果有课程则提醒,否则添加课程问题
问题描述
出于某种原因,下面的代码同时触发了两个条件;
所以从我的 li 没有类开始,然后点击类“禁用”正在添加,但第一次点击时也会弹出警报?
$('.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
)。您需要将点击事件委托给列表,并在事件数据参数中指明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>
推荐阅读
- r - 仅用月份和日期计算平均日期的问题
- javascript - AngularJS 中的 HTML 解码
- reactjs - Chrome 无法使用 react-qr-reader 访问 iPhone 相机 - npm
- python - python manage.py makemigrations 错误并且还出现服务器连接错误
- java - 它说它找不到引用arraylist命令的符号,比如“.get”“.add”是的,我对java很陌生
- git - ssh 密钥意外传输到我自己的计算机
- javascript - 如何让多个带有拇指的滑动器画廊在同一页面上工作
- java - 如何使用 javax 中另一个 Json(合并 Json)的新内容更新 Json?
- reactjs - Jest 没有覆盖 useEffect 里面的函数
- flutter - 我在颤动时无法捕捉到 Firebase Auth 的异常