gpt4 book ai didi

javascript - 单击 div 时防止触发焦点事件

转载 作者:IT王子 更新时间:2023-10-29 03:09:08 24 4
gpt4 key购买 nike

这个问题类似于我之前的问题,Click action on Focused DIV ,但这次的主题是,当我单击其中一个 div 时,如何防止触发焦点事件。上次我有一个带有 tabindex='-1' 的 div 以使其在点击时可聚焦,现在我有一个带有 tabindex>0 的 div 列表,这样它们也可以在 tab 键时获得焦点。

<div tabindex='1'>Div one</div>
<div tabindex='1'>Div two</div>
<div tabindex='1'>Div tree</div>
<div tabindex='1'>Div four</div>

一些样式:

div {
height: 20px;
width: 60%;
border: solid 1px blue;
text-align: center;
}
div:focus {
border: solid 2px red;
outline: none;
}

现在我使用标志( Action )在第二次单击 div 时触发 Action (警报),如果它已经聚焦,则只需单击一次,例如使用 TAB。

var action = false;
$('div')
.click(function(e){
e.stopImmediatePropagation();
if(action){alert('action');}
action = true;})
.focus(function(){action = true;})
.blur(function(){action = false;});

上面代码的问题是 focus 事件被触发,这意味着 stopImmediatePropagation 没有按我预期的方式工作。两次单击操作可以评论 focus 事件行,但是当 div 获得时你仍然需要双击专注于标签。这是示例:http://jsfiddle.net/3MTQK/1/

最佳答案

DEMO 这里

我认为你在这里遗漏了一些部分,

  1. event.stopPropagation() 用于阻止事件冒泡。你可以阅读它here .

  2. event.stopImmediatePropagation() 除了阻止执行元素上的任何其他处理程序外,此方法还通过隐式调用 event.stopPropagation()< 来停止冒泡。你可以阅读它here

  3. 如果你想停止浏览器事件,那么你应该使用event.preventDefault()。你可以阅读它here

  4. click = mousedown + mouseup -> 当鼠标按下成功时,焦点将设置在 HTML 元素上。因此,您不应绑定(bind) click 事件,而应使用“mousedown”。看我的演示。

  5. 您不能使用 1 个 Action bool 值来确定点击了哪个 div 以及点击了多少次。检查我的演示,看看你如何处理它。

关于javascript - 单击 div 时防止触发焦点事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8735764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com