除了一种情况外,重点关注输入

时间:2011-05-30 15:34:39

标签: jquery input focus

我的问题是。我在我的网站上有一个条形码扫描仪,以验证学生是否在教室。我的表单的INPUT元素必须始终具有焦点,以便从条形码扫描器接收代码。

我的代码是:

    $("#codebarre").focus()
    $("body").click(function(){
        $("#codebarre").focus()      
})

第二个条目是为了在我点击页面时恢复焦点。我的问题是:我有可能在页面的另一个输入中写评论。使用我的代码,确实只是在我的输入中单击后,#codebar恢复焦点,我无法写入我的输入。所以我的需求是:始终专注于#codebar,除非我在我的评论INPUT中单击(焦点)。

我试试这个:

    $("#codebarre").focus()
    $("body").click(function(){
    if( !$(".remark").focus() ){
        $("#codebarre").focus()  
    }        
})

我的代码不起作用。你能告诉我我做错了什么吗?

4 个答案:

答案 0 :(得分:3)

您无法确定控件是否以该方式具有焦点。 focus()只会将焦点设置为该控件。有关如何确定控件是否具有焦点的详细说明,请参阅此答案:Using jQuery to test if an input has focus

如果您使用的是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()  
    }

答案 1 :(得分:1)

使用document代替body,将!$(".remark").focus()更改为$(".remark:focus").length == 0!$(".remark").is(":focus")

$(document).click(function(){
    if($(".remark:focus").length == 0) {
        $("#codebarre").focus() ;
    }        
})

请参阅fiddle

答案 2 :(得分:0)

使用:focus选择器。 http://api.jquery.com/focus-selector/

if($(".remark:focus").length==0 ){
        $("#codebarre").focus()  
} 

答案 3 :(得分:0)

您可以使用注释框的OnFocus事件来运行设置变量的一段代码。因此,当输入设置为注释框时,该变量将设置为false。如果变量设置为false,则需要确保它不再将焦点更改为条形码框。