Javascript IndexOf无法处理表单数组

时间:2011-05-13 16:15:55

标签: javascript arrays indexof

如何在控制台中发生以下情况?还是我误用了indexOf?

document.forms:

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

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

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

5 个答案:

答案 0 :(得分:1)

你使用了错误的语法... indexOf是一个方法,所以它应该使用括号,而不是括号。

someString.indexOf("form-0")

使用对象,您只需使用括号来请求对象:

document.forms["form-0"]

答案 1 :(得分:1)

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

您可以使用Array.prototype.slice.call转换它:

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

但请注意,indexOf并非普遍支持。但是,我并不完全确定你要做什么,所以它可能不是必要的方法。

答案 2 :(得分: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]forms['form-1']等的引用。

答案 3 :(得分:0)

如果你想通过它的ID获取元素,只需直接使用ID。

document.forms['form-0'];

如果你想要它的索引,你似乎已经拥有了它。只需删除"form-"部分。

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

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

var myform = document.forms['form-0'];
var index = myform.id.replace('form-','')

答案 4 :(得分:0)

如果要使用javascript访问表单元素,则必须使用:document.myform.elements [i],其中i是元素的位置。您可以参考此Javascript Form Objects - Properties and Methods tutorial。 indexof是一个javascript字符串对象的方法。