Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对象没有';t支持属性或方法“;焦点“;_Javascript_Jquery_Html_Dom - Fatal编程技术网

Javascript 对象没有';t支持属性或方法“;焦点“;

Javascript 对象没有';t支持属性或方法“;焦点“;,javascript,jquery,html,dom,Javascript,Jquery,Html,Dom,我使用的是我网站上的标记输入文本字段 我试图将焦点设置到文本字段,但它不起作用。它给了我以下错误: Unhandled exception at line 37, column 9 in LOCALDOMAIN-LINK-REMOVED 0x800a01b6 - JavaScript runtime error: Object doesn't support property or method 'focus'. 此错误所指的行(37)为: searchQueryTB.focus(); 我的

我使用的是我网站上的
标记输入
文本字段

我试图将焦点设置到文本字段,但它不起作用。它给了我以下错误:

Unhandled exception at line 37, column 9 in
LOCALDOMAIN-LINK-REMOVED
0x800a01b6 - JavaScript runtime error: Object doesn't support property or method 'focus'.
此错误所指的
行(37)
为:

searchQueryTB.focus();
我的全部代码是:

document.onload = FocusSearchQueryTextBox();

function FocusSearchQueryTextBox() {
    var searchQueryTB = document.getElementsByClassName("TBhandle0F7X");
    searchQueryTB.focus();
}
标记:

<input type="text" value="" name="SearchQuery" id="tagsinput" class="TBhandle0F7X" />

因此,我假设这可能与以下事实有关:文本字段实际上可能不是一个合适的
textfield
,因为它是一个jQuery UI,或者是
tagsinput
项目使用的东西?也许我错了,但到目前为止,我在谷歌上没有任何运气,而且在该项目的网站上似乎也没有任何与此相关的内容

我也在jQuery中尝试过这个,但正如预期的那样,它也不起作用。同样的错误


关于什么是错误的,或者如何解决这个问题,有什么建议吗?

getElementsByClassName
返回DOM元素的集合,而不是元素本身,即使只有一个元素具有类
TBhandle0F7X

你可能想要

var searchQueryTB = document.getElementsByClassName("TBhandle0F7X")[0];

document.getElementsByClassName
返回DOM元素的集合,因此无法对分配给该集合的变量调用DOM元素
focus
方法。您可以将集合第一个索引处的元素分配给
searchQueryTB
,但在我看来(这可能是我完全错误的假设)您只需要关注一个文本框,为什么不给它一个
id
属性并使用
document.getElementById

如果您希望用户使用现代web浏览器(基本上是Internet Explorer 8+或任何其他浏览器),则可以使用
querySelector
方法:

var searchQueryTB = document.querySelector('.TBhandle0F7X'); // assuming only a single text box with this class

使用
getElementsByClassName
,结果类似于一个数组,因此在代码中
searchQueryTB
是一个数组

解决方案:

document.onload = FocusSearchQueryTextBox();

function FocusSearchQueryTextBox() {
    var searchQueryTBs = document.getElementsByClassName("TBhandle0F7X"),
        searchQueryTB = searchQueryTBs && searchQueryTBs[0];

    searchQueryTB && searchQueryTB.focus();
}

除了
getElementsByClassName
返回数组(因此需要索引)的问题之外,还有一个问题,即并非所有浏览器都支持此方法,因此最好使用
id
属性和
document.getElementById()

但问题仍然是IE在
focus()
这一“惰性”实现方面存在问题,请参见其中包含的一些解决方案


另外,您可以考虑在HTML标记中使用<代码> AutoFoCux属性(即使在脚本被禁用时也被现代浏览器支持)。

我刚刚尝试了您的建议,它给了我完全相同的错误:<代码>未处理的异常在第37行,http//site 0x800a138f中的第9列-JavaScript运行时错误:无法获取未定义或空引用的属性“focus”@Jason是
focus
本机函数,还是jQuery的?在后一种情况下,请参见我的答案。(编辑:NVM,刚刚看到)当我尝试以下代码时:
var searchQueryTB=document.getElementsById(“TBhandle0F7X”)
(并将textfield元素从class更改为id)-它抛出以下异常:
第36行未处理的异常,中的第9列http://localhost:5917/Home.cshtml  0x800a01b6-JavaScript运行时错误:对象不支持属性或方法“getElementsById”
@Jason its
getElementById
注意缺少
s
我指的是本机函数,虽然我已经用jQuery和JavaScript测试了每一个选项,每次都收到了完全相同的错误。
searchQueryTB
是一个数组。你在用什么浏览器?从您在下面答案中的评论中可以看出,您可能正在使用一个本机不支持
focus
的版本。我正在Windows 8版本预览中使用Internet Explorer 10。谢谢@strustmaster-很高兴知道!不幸的是,我没有一个类似的环境来测试它,所以我不能确定,但我仍然在打赌一个bug或浏览器怪癖。我在Firefox和Chrome上测试了本机
focus
的“tagsinput”,它没有引发任何异常。你能在另一个浏览器中运行你的代码,看看会发生什么吗?谢谢,但不幸的是,这对我不起作用。它不会抛出任何异常,但也不会聚焦。1)
getElementsByClassName
在IE9-中不受支持。您可以改用
getElementById
。2) 您最好确保
searchQueryTB
是否为DOM元素。3) 任何DOM元素都可以设置
tabindex
属性作为焦点。某些表单元素(输入、按钮…)始终可以成为焦点。