Javascript IndexOf не работает с массивом форм - PullRequest
0 голосов
/ 13 мая 2011

Почему в консоли происходит следующее? или я неправильно использую 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 ]

1 голос
/ 13 мая 2011

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];
   }
}

Теперь у вас есть массив, содержащий ссылки на все формы, и для каждой формы значение индекса, которое отражает номер формы, который вы дали ей через ее идентификатор.Итак: formsArray[0] содержит ссылку на forms['form-0'], formsArray[1] на forms['form-1'] и т. Д.

1 голос
/ 13 мая 2011

document.forms является HTMLCollection. Это не массив. Как таковой, он не имеет indexOf метода.

Вы можете конвертировать его, используя Array.prototype.slice.call:

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

Обратите внимание, однако, что indexOf не поддерживается повсеместно. Однако я не совсем уверен в том, что вы пытаетесь сделать, так что в любом случае это может не быть необходимым подходом.

1 голос
/ 13 мая 2011

Вы использовали неправильный синтаксис ... indexOf - это метод, поэтому он должен использовать скобки, а не скобки.

someString.indexOf("form-0")

С объектом вы можете просто запросить объект с помощью скобок:

document.forms["form-0"]
0 голосов
/ 14 мая 2011

Если вы хотите получить доступ к элементам формы, используя javascript, тогда вы должны использовать это: document.myform.elements [i], где i - позиция элемента. Вы можете ссылаться на это Учебное пособие по объектам формы Javascript - Свойства и методы . indexof - это метод строкового объекта javascript.

0 голосов
/ 13 мая 2011

Если вы пытаетесь получить элемент по его идентификатору, просто используйте идентификатор напрямую.

document.forms['form-0'];

Если вы хотите его индекс, может показаться, что он уже есть в идентификаторе.Просто удалите "form-" part.

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

Или, если у вас есть элемент, сделайте то же самое через его свойство ID:

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