专注于输入,只有一种情况除外

问题描述

| 我的问题是。我在我的网站上有一个条形码扫描仪,目的是验证学生是否在教室里。我表格的INPUT元素必须始终具有焦点,以便从条形码扫描仪接收代码。 我的代码是:
    $(\"#codebarre\").focus()
    $(\"body\").click(function(){
        $(\"#codebarre\").focus()      
})
如果我单击页面上的第二个条目以恢复焦点。我的问题是:我有可能在页面的另一个输入中写评论。使用我的代码,的确是,单击输入框后,#codebar恢复了焦点,而我却无法在输入框内编写代码。因此,我的需要是:始终将焦点放在#codebar上,除非我在备注输入中单击(焦点)。 我尝试这样:
    $(\"#codebarre\").focus()
    $(\"body\").click(function(){
    if( !$(\".remark\").focus() ){
        $(\"#codebarre\").focus()  
    }        
})
我的代码无效。你能告诉我我做错了什么吗?     

解决方法

        您无法确定控件是否以这种方式具有焦点。 focus()只会将焦点设置为该控件。请参阅此答案以获取有关如何确定控件是否具有焦点的详细说明:使用jQuery测试输入是否具有焦点 如果您使用的是jQuery 1.6,则应该可以:
$(\"body\").click(function(){
    if (!$(\".remark\").is(\":focus\")) {
        $(\"#codebarre\").focus()  
    }
编辑 如果您使用的是jQuery的早期版本,则可以使用
$(document.activeElement)
确定哪个控件具有焦点。在这种情况下,代码应为:
$(\"body\").click(function(){
    if (!$(document.activeElement).hasClass(\"remark\")) {
        $(\"#codebarre\").focus()  
    }
    ,        用
document
代替of6ѭ并将
!$(\".remark\").focus()
更改为
$(\".remark:focus\").length == 0
!$(\".remark\").is(\":focus\")
$(document).click(function(){
    if($(\".remark:focus\").length == 0) {
        $(\"#codebarre\").focus() ;
    }        
})
见小提琴。     ,        使用
:focus
选择器。 http://api.jquery.com/focus-selector/
if($(\".remark:focus\").length==0 ){
        $(\"#codebarre\").focus()  
} 
    ,        您可以将OnFocus事件用于注释框,以运行一段设置变量的代码。因此,当输入设置为注释框时,变量将设置为false。并且,如果变量设置为false,则需要确保它不再将焦点更改为条形码框。