Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery:如果将接收焦点的元素是特定类型,如何取消模糊事件?_Javascript_Jquery_Event Handling - Fatal编程技术网

Javascript jQuery:如果将接收焦点的元素是特定类型,如何取消模糊事件?

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="

我正在编写一个自定义表单UI,目前正在构建一个选择框替换。自定义选择控件基本上是一个div,其中包含一个隐藏的(屏幕外)选择输入,以及一个包含锚元素的范围,该范围反映了选择输入的选项:

<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();