0

単純な JS 複製関数を使用して div を複製しています。内部には、「getOrRequest」と呼ばれる 1 つのグループを含むラジオ ボタン付きのフォーム情報があります。各 div は本を表し、独自の「getOrRequest」値を持つ必要があります。

他のすべてのラジオ ボタンに影響を与えることなく、複製されたラジオ ボタンの各グループを選択可能にするために、名前を変更する必要があります。これらの値を変更する最良の方法は何ですか?

問題が発生した場合に備えて、divを複製する方法を次に示します。

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

次に、名前の値を変更する方法をいくつか試しました。このような:

bookInfo.copyDiv.getOrRequest_0.setAttribute("name", "'getOrRequest' + idNumber + '[]'");
bookInfo.copyDiv.getOrRequest_1.setAttribute("name", "'getOrRequest' + idNumber + '[]'");

これと同様に:

bookInfo.copyDiv.getOrRequest_0.name = 'getOrRequest' + idNumber + '[]';
bookInfo.copyDiv.getOrRequest_1.name = 'getOrRequest' + idNumber + '[]';

getOrRequest_0 と getOrRequest_1 は入力値の ID ですが、いくつかの方法で試してみましたが、何も機能していないようです。前もって感謝します!

編集: 詳細情報

私が使用している特定のコードは次のとおりです。

function addAnotherPost(){

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

copyDiv.id = 'addListing' + idNumber;

for(var j = 0; j < size; j++){
   if(copyDiv.childNodes[j].name === "getOrRequest[]"){
      copyDiv.childNodes[j].name = "getOrRequest" + idNumber + "[]";
   }
}

bookInfo.appendChild(copyDiv);

idNumber++;
}

そして、それはうまくいかないようです..divは複製されていますが、名前の値は変更されていません。

4

2 に答える 2

0

これを試すことができます - http://jsfiddle.net/ZKHF3/

    <div id="bookInformation">
        <div id="addListing">
            <input type="radio" name="addListing0[]" />
            <input type="radio" name="addListing0[]" />
        </div>
    </div>
    <button id="button">Add Listing</button>

    <script>
    document.getElementById("button").addEventListener("click", AddListing, false);

    var i = 1;
    var bookInfo = document.getElementById('bookInformation');

    function AddListing() {
        var copyDiv = document.getElementById('addListing').cloneNode(true);
        var size    = copyDiv.childNodes.length;

        copyDiv.id = "listing" + i;
        for ( var j = 0; j < size; j++ ) {
            if ( copyDiv.childNodes[j].nodeName.toLowerCase() == 'input' ) {
                copyDiv.childNodes[j].name = "addListing" + i + "[]";
            }
        }

        bookInfo.appendChild(copyDiv);
        i++;
    }
    </script>
于 2012-07-11T18:39:28.443 に答える
0

問題は、div の子ノードを探していることですが、チェック ボックスは子ノードではなく、子孫ノードです。探しているノードは、ラベル内にネストされています。を使用してすべての子孫入力を探すようにコードを更新しますcopyDiv.getElementsByTagName("input")

var idNumber = 0;
function addAnotherPost() {
    var bookInfo = document.getElementById('bookInformation');
    var copyDiv = document.getElementById('addListing').cloneNode(true);
    copyDiv.id = 'addListing' + idNumber;

    var inputs = copyDiv.getElementsByTagName("input");
    for(var j = 0; j < inputs.length; j++){
       if(inputs[j].name === "getOrRequest[]"){
          inputs[j].name = "getOrRequest" + idNumber + "[]";
       }
    }

    bookInfo.appendChild(copyDiv);
    idNumber++;
}

http://jsfiddle.net/gilly3/U5nsa/

于 2012-07-11T18:11:16.507 に答える