Как получить дескриптор динамически сгенерированного имени поля в javascript?

У меня есть ряд полей, созданных динамически на основе записей базы данных. Они будут называться cardObject1, cardObject2 и т. д. для необходимого количества строк. Теперь я пытаюсь получить доступ к определенному полю cardObject в функции, в которую передается число, но получаю сообщение об ошибке.

Поле выглядит так:

<input name="cardObject241" value="2,$25.00,1" type="hidden">

Код js, который я использую, выглядит так:

function deleteFromCart(id){
  if (confirm("Are you sure you want to delete this item from your cart?")){
    var voucherNbr = document.getElementById("voucherNbr").value;
    var cardObjectArray = document.getElementById("cardObject"+id).value.split();
    var amtToDelete = cardObjectArray[1];
    alert("need to delete " + amtToDelete); 
  }

}

И ошибка, которую я получаю,

document.getElementById("cardObject" + id) is null

в этой строке:

 var cardObjectArray = document.getElementById("cardObject"+id).value.split(); 

Как я могу получить дескриптор поля cardObject, которое заканчивается числом, переданным в качестве параметра id?


person EmmyS    schedule 22.09.2010    source источник


Ответы (3)


Вам нужно добавить атрибут id="" с тем же именем, что и атрибут name.

<input id="cardObject241" name="cardObject241" value="2,$25.00,1" type="hidden">
person Jeremy Goodell    schedule 22.09.2010

Во-первых, вашему полю ввода нужен идентификатор, а также имя, поэтому оно будет выглядеть так:

<input name="cardObject241" id="cardObject241" value="2,$25.00,1" type="hidden">

Во-вторых, если у вас есть объект, который может существовать или не существовать, всегда полезно проверить его существование, прежде чем вы начнете манипулировать свойствами:

var tempObj=document.getElementById("cardObject"+id)
if(tempObj) {
    var cardObjectArray = tempObj.value.split();
    ...do your stuff with cardObjectArray....
}
person Spudley    schedule 22.09.2010

Вы можете использовать document.getElementsByName() или (кроссбраузерное возвращение в каменный век)

document.forms[formIndexOrName].elements["cardObject" + id].value.split(",")
person Stan Rogers    schedule 22.09.2010
comment
Стэн, ты ли это? Домино Стэн? Привет! Это Эстер Стром, бывший разработчик Domino. В последнее время я действительно не следил за блогами Lotus, но я рад видеть, что вы все еще здесь! - person EmmyS; 22.09.2010
comment
Да, это я. Все еще жив, но в последнее время брыкаюсь в основном непроизвольно. Не могу ничего сделать, кроме как ответить на несколько вопросов, которые я все еще могу выяснить в эти дни (и я обновлял блог только пару раз в год в течение последних нескольких лет). Приятно видеть, что ты все еще здесь — последнее, что я помню, было что-то вроде страха за здоровье. - person Stan Rogers; 22.09.2010