这个问题与我之前的问题相似,单击已聚焦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时触发一个操作(alert),如果已经聚焦,则只需单击一次,例如使用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 event)被触发了,这意味着stopImmediatePropagation不像我预期的那样工作。当注释掉聚焦事件线时,两个点击动作可以正常工作,但是当div通过TAB键获得焦点时,仍然需要双击。