1

長い間ここにいて、とてもシンプルに見えますが、やりたいことができません。

各本には、ラジオボタンを使用して選択される「getOrRequest」値があります。divが複製されるたびに、本が独自のgetOrRequest値を持つように、名前の値を変更する必要があります。私はついに複製を取り下げましたが、正しい入力の名前を変更することは協力的ではありません。

私を本当に悩ませているのは、それが機能することですが、私が取得しようとしている名前の値は変更されていません。配列のどの部分が変更されているかと関係がありますが、必要な値、つまり最後の2つの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

したがって、postType.lengthが変更されるため、基本的にforループが変更されます。

私はあなたがしたいことは次のようなものだと思います:

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 に答える