Javascript focus()和select()怪癖

Javascript focus()和select()怪癖,javascript,forms,select,focus,Javascript,Forms,Select,Focus,我正在处理一个表单,在ie中得到null或not对象错误 <form action="#" method="post" name="adv_search"> <input class="inputbox" type="text" name="keyword1" value="none" id="keyword1"/> </form> <script> document.adv_search.keyword1.focus(); document.

我正在处理一个表单,在ie中得到null或not对象错误

<form action="#" method="post" name="adv_search">

<input class="inputbox" type="text" name="keyword1" value="none" id="keyword1"/>
</form>

<script>
document.adv_search.keyword1.focus();
document.adv_search.keyword1.select();
</script>

document.adv_search.keyword1.focus();
document.adv_search.keyword1.select();
//如果我使用

<script>
var key1 = document.getElementById('keyword1');
   key1.focus();
   key1.select();
</script>

var key1=document.getElementById('keyword1');
键1.焦点();
键1.选择();
//一切都很好

我想知道为什么。 我希望它在没有输入字段id标签的情况下工作

提前谢谢


不应删除document.formname.fieldname.focus(); 和document.formname.fieldname.select();
工作?

ID方法确实是最好的方法,但如果您想按名称进行,请使用

在这种情况下,它可能如下所示:

<script>
   // retrieves array of objects with the name 'keyword1' 
   // and takes the first one
   var key1 = document.getElementsByName('keyword1')[0]; 
   key1.focus();
   key1.select();
</script>

//检索名为“关键字1”的对象数组
//拿第一个
var key1=document.getElementsByName('keyword1')[0];
键1.焦点();
键1.选择();

您的特定示例适用于我,但如果我添加另一个同名字段:

<input type="text" name="keyword1" />
<input type="text" name="keyword1" />
是此语法的快捷方式(可追溯到DOM级别0和Netscape 2天!):

(顺便说一句,最好使用此完整语法,而不是依赖于根据名称索引的“document”和“form”对象的行为:如果向HTMLDocument或HTMLFormElement添加了新方法,则可能会与您使用的控件名称冲突。当您使用document.forms或form.elements时,这不是一个问题l选项。此外,IE错误地将所有名称和id转储到“document”中,因此,如果您的表单中有一个名为“document”的元素,那么,
document.adv\u search
将返回错误的元素。)

无论如何,当您按如下名称访问元素时,DOM级别0脚本方法的行为有点奇怪。如果有一个匹配的元素,您将得到一个作为独立对象的元素。另一方面,如果有多个,您将得到一个对象列表。您不能调用
focus()
select()
在类似数组的列表上,这就是出现错误的原因;返回列表时,必须执行类似关键字1[0].focus()的操作

因此,您必须决定是否要使用老式的DOM级别0方法来访问表单控件 — 在这种情况下,您将不得不处理对单个或多个控件的嗅探 — 或者转到“DOM级别1”引入的基于ID的方法:

document.getElementById('keyword1').focus();

基于ID的方法通常需要更多的键入(在脚本中,如果您希望通过这种方式访问的所有元素还没有ID,则向它们添加ID),但是它们很简单且明确(您也可以将
名称
放在脚本本身上。)

忘记使用getElementsByName会导致错误“对象不支持此属性或方法”您是对的。我使用的代码有两个同名字段。
document.forms.adv_search.elements.keyword1
document.getElementById('keyword1').focus();