这个问题和我之前的问题 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;
}
现在,我使用标志(动作)在第二次单击 div 时触发动作(警报),如果它已经聚焦,则只需单击一次,例如使用 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 获得对 TAB 的关注时你仍然需要双击.这是示例:http: //jsfiddle.net/3MTQK/1/
原文由 olanod 发布,翻译遵循 CC BY-SA 4.0 许可协议
演示 在这里
我认为你在这里遗漏了一些部分,
event.stopPropagation()
用于阻止事件冒泡。你可以 在这里 阅读它。event.stopImmediatePropagation()
除了阻止执行元素上的任何其他处理程序之外,此方法还通过隐式调用event.stopPropagation()
来停止冒泡。你可以 在这里 阅读如果你想停止浏览器事件,那么你应该使用
event.preventDefault()
。你可以 在这里 阅读click = mousedown + mouseup
-> 当鼠标按下成功时,焦点将设置在 HTML 元素上。因此,不应绑定click
事件,而应使用“mousedown”。看我的演示。您不能使用 1 个动作布尔值来确定单击了哪个 div 以及单击了多少次。检查我的演示,看看你如何处理它。