我的问题是。我在我的网站上有一个条形码扫描仪,以验证学生是否在教室。我的表单的INPUT元素必须始终具有焦点,以便从条形码扫描器接收代码。
我的代码是:
$("#codebarre").focus()
$("body").click(function(){
$("#codebarre").focus()
})
第二个条目是为了在我点击页面时恢复焦点。我的问题是:我有可能在页面的另一个输入中写评论。使用我的代码,确实只是在我的输入中单击后,#codebar恢复焦点,我无法写入我的输入。所以我的需求是:始终专注于#codebar,除非我在我的评论INPUT中单击(焦点)。
我试试这个:
$("#codebarre").focus()
$("body").click(function(){
if( !$(".remark").focus() ){
$("#codebarre").focus()
}
})
我的代码不起作用。你能告诉我我做错了什么吗?
答案 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,则需要确保它不再将焦点更改为条形码框。