如何在控制台中发生以下情况?还是我误用了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
答案 0 :(得分:1)
你使用了错误的语法... indexOf是一个方法,所以它应该使用括号,而不是括号。
someString.indexOf("form-0")
使用对象,您只需使用括号来请求对象:
document.forms["form-0"]
答案 1 :(得分:1)
document.forms
是HTMLCollection
。它不是一个数组。因此,它没有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字符串对象的方法。