javascript - Jquery .hasClass() 方法不适用于 dom 点击事件检查
问题描述
我有一个带有 class 的输入框use-keyboard-input
。我希望在所有单击事件中触发 DOM 事件,除非单击输入框
我做了:
$('*').click(function(event) {
if ($(this).hasClass('use-keyboard-input') == false){
console.log(`pressing outside the box`)
keyboardHidden = false
$('.keyboard--hidden').each(()=>{
keyboardHidden = true
})
if (keyboardHidden == false){ //If keyboard is not hidden
// if (this !== $(".keyboard")) {
Keyboard.close();
console.log(`Close the keyboard`)
// }
}
}
});
但是,即使我在带有 class 的输入框中单击,我也会use-keyboard-input
收到控制台消息
console.log("pressing outside the box")
解决方案
尝试使用Event.stopPropagation()
which 将阻止当前事件在捕获和冒泡阶段的进一步传播。
演示:
$('*').click(function(event) {
event.stopPropagation();
if ($(this).hasClass('use-keyboard-input') == false){
console.log(`pressing outside the box`)
keyboardHidden = false
$('.keyboard--hidden').each(()=>{
keyboardHidden = true
})
if (keyboardHidden == false){ //If keyboard is not hidden
console.log(`Close the keyboard`)
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
Container
<input class="use-keyboard-input"/>
</div>
推荐阅读
- python - 如何降低时间复杂度?
- android - 如何在android中使用背景图像制作透明布局?
- sql-server - 表连接总和不正确
- html - 如何更改特定字符的颜色 [jQuery/RegEx]
- mongodb - 如何提高此 MongoDB 查询的性能
- android - EdgeLight:屏幕边框不会超出反应原生的缺口和软键
- jquery - 使用 AJAX 从 HTML 表中插入大量行的最佳方法
- python - 显示具有自定义颜色的数组
- .net - 长时间运行的 SQL Server 报告,如何在异步模式下运行它们
- regex - 正则表达式与 ${} 内允许的句点精确匹配一个 alpha 字符串