Javascript 当焦点从其他输入中丢失时,如何聚焦主输入?

Javascript 当焦点从其他输入中丢失时,如何聚焦主输入?,javascript,jquery,html,Javascript,Jquery,Html,我在一个网站上工作,那里有一个我需要全天关注的输入,因为它是一个条形码阅读器。但网站中还有其他输入,用户必须能够自己填写,这样我就不能一直关注条形码输入 我一直在尝试使它以每1.5秒自动聚焦条形码输入的间隔工作,在聚焦输入时停止该间隔,在用户聚焦某些输入时再次启动该间隔。但它不起作用 <script type="text/javascript"> $(document).ready(fucntion(){ $('#barcode_input').focus(

我在一个网站上工作,那里有一个我需要全天关注的输入,因为它是一个条形码阅读器。但网站中还有其他输入,用户必须能够自己填写,这样我就不能一直关注条形码输入

我一直在尝试使它以每1.5秒自动聚焦条形码输入的间隔工作,在聚焦输入时停止该间隔,在用户聚焦某些输入时再次启动该间隔。但它不起作用

<script type="text/javascript">

    $(document).ready(fucntion(){
        $('#barcode_input').focus();
    });

    $(":input").focusin(function(){
        if(barCodeFocusInterval) {clearInterval(barCodeFocusInterval);}
    });

    $(":input").focusout(function(){
        barCodeFocusInterval = setInterval(function(){
            $('#barcode_input').focus();
        }, 1500);
    });
</script>

$(文档).ready(功能(){
$(“#条形码输入”).focus();
});
$(“:输入”).focusin(函数(){
if(barCodeFocusInterval){clearInterval(barCodeFocusInterval);}
});
$(“:输入”).focusout(函数(){
barCodeFocusInterval=setInterval(函数(){
$(“#条形码输入”).focus();
}, 1500);
});
我认为它不起作用,因为当focusin被触发时,什么应该停止间隔,它已经发送了聚焦条形码输入的命令,所以我不能聚焦任何其他输入超过1.5秒


我真的不需要让它在一段时间内工作,但我已经尝试了太多的事情。希望有人能帮上忙,谢谢。

如果我理解正确-设置超时(怎么样

请参见以下内容:

  • 将注意力集中在加载的主div上
  • 仅允许用户在具有“允许”类的情况下关注其他元素
  • 一旦用户从具有“allowed”类的元素处单击,则重新聚焦到主div
$(文档).ready(函数(){
$(“#条形码输入”).focus();
var元素=$(“body”).find(“*”);
$(元素)。每个(函数(i,elm){
$(elm).blur(函数(){
如果(this.id!=“条形码输入”){
$(“#条形码输入”).focus();
}
});
$(elm).focus(函数(){
if(this.id!='barcode\u input'&&&!$(this.hasClass('allowed')){
$(“#条形码输入”).focus();
}
});
});
});
#someDiv{
宽度:100px;
高度:100px;
边缘顶部:30px;
背景色:#中交;
}



不允许的div
为什么不等待他们提交他们正在输入的任何其他数据,然后重新聚焦主
输入
?根据你的描述,我不认为间隔是相关的。我知道间隔不是必需的,但这是我尝试过的一件事,我认为这有助于理解问题。我迫不及待地等待提交,首先是因为有太多的表单我无法在提交后逐个编辑以集中输入的条形码,其次是因为有些表单使用了敲除功能,因此表单甚至没有提交。你的示例不起作用,即使用户试图在另一个元素中输入信息,它也会将焦点移回主元素,这是我使用间隔示例的错误。但这不是我期望的功能,因为我无法正确使用其他输入。只有当焦点从输入中丢失并且新的焦点元素不是输入时,主输入才应该被聚焦。您的示例显然按照我的预期工作,因此我将您的awnser设置为正确,但在我的站点中不起作用。来自JQuery插件(如Knockout和DataTables)的一些输入仍然工作错误,在1.5s后失去焦点。@Grirg这可能是因为这些插件隐藏了原始html(包括输入),并将其替换为可编辑的跨距和div,这些跨距和div的样式都非常奇特。
$(function() {
    var is_focused = false;

    function focus_to_barcode() {
        if (!is_focused) {
            $('#barcode_input').focus();
        }
    }   

    $(":input").focusin(function () {
        is_focused = true;
    });

    $(":input").focusout(function () {
        is_focused = false;
        setTimeout(focus_to_barcode, 1500);
    });
});