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 itsgetElementById
注意缺少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
属性作为焦点。某些表单元素(输入、按钮…)始终可以成为焦点。