1

已经做了很长时间了,它看起来很简单,但我无法让它做我想做的事。

每本书都有一个使用单选按钮选择的“getOrRequest”值。每次复制一个 div 时,都需要更改名称值,以便一本书有自己的 getOrRequest 值。我终于完成了复制,但现在重命名正确的输入不合作。

真正困扰我的是它可以工作,但它并没有改变我试图获取的名称值。它与更改数组的哪些部分有关,但我无法获得我想要的值,即最后两个 getOrRequest 名称。

我在这里苦苦挣扎的一个工作示例。

我的 JS 函数:

function addAnotherPost(){

var bookInfo = document.getElementById('bookInformation');
var copyDiv = document.getElementById('addListing').cloneNode(true);

copyDiv.id = 'addListing' + idNumber;
bookInfo.appendChild(copyDiv);

var divID = 'addListing' + idNumber;
var newDiv = document.getElementById(divID);
var postType = document.getElementsByName("getOrRequest[]");

alert(postType[0].name + postType[1].name + postType[2].name + postType[3].name);

for(var i = 2; i < postType.length; i++){
   postType[i].name = 'getOrRequest' + idNumber + '[]';
}

alert("got this far" + postType.length);

idNumber++;
}

相关的 HTML 块:

<div id='addListing'>
<table class='aListing'>
<tr>
<td>
                <label>
                <input type='radio' name='getOrRequest[]' value='1' />
                Request</label>
                <label>
                <input type='radio' name='getOrRequest[]' value='0' />
                Offer</label>
</td>
[...]
</table>
</div>
4

1 回答 1

1

您正在获取特定名称标识符的对象列表:

var postType = document.getElementsByName("getOrRequest[]");

所以一旦你重命名了一个元素,postType就会改变(是的,那东西很智能)

    console.log(postType.length); // = 4
    postType[i].name = 'getOrRequest' + idNumber + '[]';
    console.log(postType.length); // = 3

所以基本上 for 循环会发生变化,因为 postType.length 会发生变化。

我想你想做的是这样的:

postType[0].name = 'getOrRequest' + idNumber + '[]'; //ref changed.
postType[0].name = 'getOrRequest' + idNumber + '[]';

但是无论如何,那是不好的风格,您应该从标记的源中克隆并在附加到某些内容之前按名称重命名,例如(http://jsfiddle.net/bHLZA/2/):

var bookInfo = document.getElementById('bookInformation');
var copyDiv = document.getElementById('addListing').cloneNode(true);

copyDiv.id = 'addListing' + idNumber;
postType = copyDiv.getElementsByTagName('input');
postType[0].name = 'getOrRequest' + idNumber + '[]';
postType[1].name = 'getOrRequest' + idNumber + '[]';
bookInfo.appendChild(copyDiv);

http://jsfiddle.net/bHLZA/

于 2012-07-12T17:18:53.010 回答