问题描述
|
我的问题是。我在我的网站上有一个条形码扫描仪,目的是验证学生是否在教室里。我表格的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,则需要确保它不再将焦点更改为条形码框。