Javascript jQuery:如果将接收焦点的元素是特定类型,如何取消模糊事件?
我正在编写一个自定义表单UI,目前正在构建一个选择框替换。自定义选择控件基本上是一个div,其中包含一个隐藏的(屏幕外)选择输入,以及一个包含锚元素的范围,该范围反映了选择输入的选项:Javascript jQuery:如果将接收焦点的元素是特定类型,如何取消模糊事件?,javascript,jquery,event-handling,Javascript,Jquery,Event Handling,我正在编写一个自定义表单UI,目前正在构建一个选择框替换。自定义选择控件基本上是一个div,其中包含一个隐藏的(屏幕外)选择输入,以及一个包含锚元素的范围,该范围反映了选择输入的选项: <span class="input select"> <span id="select-select1" class="select-input"><span><span>This is the second option <a class="
<span class="input select">
<span id="select-select1" class="select-input"><span><span>This is the second option <a class="button" href="#"></a></span></span></span>
<span id="select-select1-options" class="select-options">
<a value="1" href="#"><span>This is the first option</span></a>
<a value="2" href="#"><span>This is the second option</span></a>
<a value="3" href="#"><span>This is the third option</span></a>
</span>
<select name="select1" id="select1" tabindex="2">
<option value="1">This is the first option</option>
<option value="2">This is the second option</option>
<option selected="selected" value="3">This is the third option</option>
</select>
</span>
然而,发生了以下情况:
另外,如果这有点混乱,很抱歉,很难解释清楚 我实际上正在构建一个定制的selectbox替代品,而且我发现目前所有的解决方案都缺乏。您可以尝试
e.preventDefault()
查看这是否会取消模糊事件,但我的首选方法是,如果单击锚定,只需使用$(this).closest('input').focus()将焦点返回到select代码>
另外,您是否有理由将焦点放在隐藏的选择上?您可以通过设置其tabindex来允许span捕获焦点(并响应tabbing):
$('.input').attr("tabindex", $('.input select').attr("tabindex") || "0");
然后通过完全隐藏来防止隐藏的输入捕获焦点:
$('.input select').hide();
聚焦在选择输入上有几个原因,但无论如何它都不是真正相关的,因为当锚聚焦事件触发时,聚焦的任何元素(无论是选择输入还是跨度)都将变得模糊。不过,我现在已经同意了你的重新聚焦解决方案,谢谢!
$('.input select').hide();