0

控制台中为什么会发生以下情况?还是我滥用了 indexOf?

document.forms:

[
<form id=​"form-0" name=​"form-0">​…​&lt;/form>​
, 
<form id=​"form-1" name=​"form-1">​…​&lt;/form>​
, 
<form id=​"form-2" name=​"form-2">​…​&lt;/form>​
]

document.forms.indexOf["form-0"]:

TypeError: Cannot read property 'form-0' of undefined
4

5 回答 5

1

您使用了错误的语法... indexOf 是一种方法,因此它应该使用括号,而不是方括号。

someString.indexOf("form-0")

使用对象,您可以简单地使用方括号请求对象:

document.forms["form-0"]
于 2011-05-13T16:18:42.767 回答
1

document.forms是一个HTMLCollection。它不是一个数组。因此,它没有indexOf方法。

您可以使用以下方式转换它Array.prototype.slice.call

var formsArr = Array.prototype.slice.call(document.forms);

但是请注意,这indexOf并不是普遍支持的。但是,我不完全确定您要做什么,因此无论如何它可能都不是必要的方法。

于 2011-05-13T16:22:43.780 回答
1

Document.forms 是一个集合。如果您想要表格的编号(如您的评论中所示),那么问题仍然存在:您在什么时候想要该编号?无论如何,您可以创建一个表单数组:

var allforms = document.getElementsByTagName('form'), 
    formsArray = [];
for (var i=0;i<allforms.length;i++){
   if (allforms[i].id.match(/\d+$/)){
       var indexval = parseInt(allforms[i].id.replace(/(.+)(\d+)$/,'$2'),10);
       formsArray[indexval] = allforms[i];
   }
}

现在您有一个包含对所有表单的引用的数组,并且对于每个表单都有一个索引值,该索引值反映了您通过它的 id 给它的表单编号。所以:formsArray[0]包含对forms['form-0'], formsArray[1]toforms['form-1']等的引用。

于 2011-05-13T16:42:22.857 回答
0

如果您尝试通过其 ID 获取元素,只需直接使用 ID。

document.forms['form-0'];

如果您想要它的索引,那么您似乎已经在 ID 中拥有它。只需卸下"form-"零件。

var index = 'form-0'.replace('form-','');

或者,如果您有该元素,请通过其 ID 属性执行相同操作:

var myform = document.forms['form-0'];
var index = myform.id.replace('form-','')
于 2011-05-13T16:25:03.573 回答
0

如果要使用 javascript 访问表单的元素,则必须使用:document.myform.elements[i],其中 i 是元素的位置。您可以参考这个Javascript 表单对象 - 属性和方法教程。indexof 是 javascript 字符串对象的一种方法。

于 2011-05-14T08:29:36.297 回答