通过单击元素设置焦点,但不包括某些子项
setting focus by clicking on element but excluding some children
我想在每次点击 .step 时关注元素 .editor。问题是我想排除点击按钮:.new,.delete,.copy,.resize。如果我单击按钮,我不会集中注意力,只是单独执行其他功能设置。我该怎么做。这是 html 结构:
<div class="step">
<div class="editor"></div>
<div class="new"></div>
<div class="delete"></div>
<div class="copy"></div>
<div class="resize"></div>
</div>
这是我错误的jQuery:
$(document).on('click', '.step', function() {
if ( $(this) !== $(".sort-slides") || $(".draggable_on") || $(".copy-slide") || $(".new-slide") || $(".delete-slide") )
$(this).find(".editor").focus();
});
在 JavaScript 中,当一个事件在元素上触发时,它会在元素的每个祖先上触发。这称为事件传播。可以通过从事件处理程序返回false
来停止此行为。
$(".new, .delete, .copy, .resize").click(function(event) {
// do something
alert("click");
// prevent the event from propagating
return false;
});
$(".step").click(function() {
// do something
alert("focus");
});
下面是 CodePen 上的一个示例。
然而,正如Gupta所说,focus
函数仅适用于<input>
、<select>
和<a>
标签。
首先,你的if语句不正确。
if (x == 1 || 2 || 3 || 4 || 5) { ... }
与 不同
if (x == 1 || x == 2 || x == 3 || x == 4 || x == 5) { ... }
该语句将始终返回 true,因为除 0 之外的任何内容都将是 true。因此,即使 x 为 0,该语句也将是
if (false || true || true || true || true) { ... }
此外,$(this)
将始终是捕获点击事件.step
div,而不是它的任何子级。
相关文章:
- 如何在不需要单击按钮的情况下获取选项的值
- Selenium驱动程序不反映单击()后的页面更改
- 单击“按钮”而不是单击“表格行”
- 悬停时展开垂直下拉菜单,而不是单击
- Jquery显示的导航不'单击'主页'
- 单击按钮进入下一个选项卡,而不是单击选项卡
- 计时器自动运行,而不是单击javascript按钮
- 通过单击选项卡而不是单击网站的任何部分来隐藏选项卡
- this.offset不是单击函数中的函数
- 通过模糊功能传递链接,而不是单击另一个链接
- 覆盖单击时关闭菜单需要双击而不是单击
- Javascript RegEx:如何获取单引号之间的名称(不包括单引号)
- Jquery检测“;输入“;按键而不是单击鼠标
- 在javascript中强制使用enter而不是单击
- 为什么首先单击文档空白处的任何位置启动代码,而不是单击超链接,以及为什么打开了太多选项卡
- 单击跨度会导致模糊事件,该事件会移动跨度,使其不注册单击
- 表单在页面加载时而不是单击时运行提交脚本
- 函数在绑定而不是单击上执行
- JavaScript 在加载时触发而不是单击
- 是否可以在不导致单击事件的情况下更改复选框状态