1

HTML ページに 3 レベルの繰り返しグループ (ネストされたフィールドセット) が必要です。単一のフィールド セットに対して追加機能を正常に実行できますが、3 つのレベルのソリューションを見つけることができません。

A の内側にある B の内側に 3 つのネストされた繰り返しグループ C があるとします。問題のリストは次のとおりです。

1) C の別のクローンを追加するとき (つまり、B が 2 つの C を囲むことを意味します)、次に別の B を追加するとき (A が 2 つの B を囲むことを意味します)。新しく追加された 2 番目の B には 2 つの C がありますが (B は再び複製されるため)、C は 1 つだけである必要があります。

2) フィールド セット要素の名前と ID を変更している間、C が複製されている場合はそれを達成できます (問題ではない xxx1 と xxx2 として ID を持つ 2 つの C があります) が、ユーザーが最初に B を追加した場合次に、新しい B 内に 2 つの C を追加します。名前の変更も処理できません。

以下は、私が使用する HTML と Java スクリプトです。解決策を教えてください。または、問題に対するより良いアプローチを提案してください。

    <html >
<head>

<script type="text/javascript" src="cloneFieldset.js"></script>
</head>
<body >


        <form name="mf" method="post" action="#" onsubmit="return false;">
        <input type="hidden" name = "Road_RepeatingGroup" id= "Road_RepeatingGroup_id" />   
         <fieldset name="fieldset1" id="roadRepeatingGroup_id1" > 
                 <input type="hidden" name = "road" id= "road_id" />
        <legend>
          Road
        </legend> 
        <table cellspacing="2" cellpadding="3" border="0" width="100%" name="test">
          <tr>
            <td width="20%">Access Road</td>
          </tr><tr>
           <td width="20%">
              <input type="text" name="Access_Road1" id="Access_Road_id1"/>
            </td>
            </tr>
        </table>
       <input type="hidden" name = "Test_RepeatingGroup" id= "Test_RepeatingGroup_id" />
        <fieldset name="test1" id="test_id1">
        <input type="hidden" name = "Test" id= "Test_id" />
        <legend>
        Test
        </legend>
        <p>
          Instructions
        </p>
        <p>
          <input type="text" name="txt_Instructions_test1" id="txt_Instructions_test_id1" />
        </p>

        <div>
        <input type="hidden" name = "Inner_RepeatingGroup" id= "Inner_RepeatingGroup_id" />
            <fieldset name="innetMost1" id="innetMost_id1">
            <input type="hidden" name = "Inner" id= "Inner_id" />
            <legend>
            InnerMost
            </legend>
            <p>
          Inner Instructions
        </p>
        <p>
          <input type="text" name="txt_InnerInstructions_test1" id="txt_InnerInstructions_test_id1" />
        </p>

        <button type="button" name="btn_Road_Delete_inner" id="btn_Road_Delete_inner1" onclick="deleteMe(this);">
          Delete
        </button>
        <button type="button" name="btn_Road_Edit_inner" id="btn_Road_Edit_inner1" onclick="addMe(this);">
          Add
        </button>
        <input type="hidden" name = "/Inner" id= "Inner_id" />
            </fieldset>
            <input type="hidden" name = "/Inner_RepeatingGroup" id= "Inner_RepeatingGroup_id" />
        <button type="button" name="btn_Road_Delete_test" id="btn_Road_Delete_test1" onclick="deleteMe(this);">
          Delete
        </button>
        <button type="button" name="btn_Road_Edit_test" id="btn_Road_Edit_test1" onclick="addMe(this);">
          Add
        </button>
        </div>
        <input type="hidden" name = "/Test" id= "Test_id1" />
        </fieldset>
        <input type="hidden" name = "/Test_RepeatingGroup" id= "Test_RepeatingGroup_id1" />
         <div>
        <button type="button" name="btn_Road_Delete" id="btn_Road_Delete1" onclick="deleteMe(this);">
          Delete
        </button>
        <button type="button" name="btn_Road_Edit" id="btn_Road_Edit1" onclick="addMe(this);">
          Add
        </button>
        </div>
        <input type="hidden" name = "/road" id= "road_id1" />
      </fieldset> 
            <input type="hidden" name = "/Road_RepeatingGroup" id= "Road_RepeatingGroup_id1" />

                <table>
                <tr><td>
                    <p>
                <input type="button" value="Submit" class="button" onclick="getElementnames();" />
                                <input type="button" value="Check FieldSet" class="button" onclick="checkFieldset();" />
            </p>
                      </td></tr>  </table>
        </form>

</body>
</html>

ジャバスクリプト:

function addMe(a){
var original;
    if(a.type == 'button'){

    original = a.parentNode;
    }
    else{

     original= document.getElementById(a);
    }

        while (original.nodeName.toLowerCase() != 'fieldset')
    {
        original = original.parentNode;
    }
    var duplicate = original.cloneNode(true);
     //alert("id :"+duplicate.id);
   var changeID= duplicate.id;

   var counter = parseInt(changeID.charAt(changeID.length-1));
   //alert("counter :"+ counter);
     ++counter;
   var afterchangeID = changeID.substring(0,changeID.length-1);
   //alert("afterchangeID :"+ afterchangeID);
    var newID=afterchangeID + counter;
    //alert("newID :"+ newID);
    duplicate.id = newID;

    var tagNames = ['label', 'input', 'select', 'textarea'];
        for (var i in tagNames)
        {

    var nameChange = duplicate.getElementsByTagName(tagNames[i]);

        for (var j = 0; j < nameChange.length; j++)
    { //++counter;
        if (nameChange[j].type != 'hidden'){
        var elementName = nameChange[j].name;
                //alert("elementName :"+ elementName);


                var afterSplitName = elementName.substring(0,elementName.length-1);
                //alert("afterSplitName :"+ afterSplitName);
             nameChange[j].name = afterSplitName + counter;
                //alert("nameChange[j].name :"+ nameChange[j].name); 

        var elementId = nameChange[j].id;
                //alert("elementId :"+ elementId);

                var afterSplitId = elementId.substring(0,elementId.length-1);
                //alert("afterSplitId :"+ afterSplitId);
                    nameChange[j].id = afterSplitId + counter;
                       //alert("nameChange[j].id :"+ nameChange[j].id);

    }
        }
}

    insertAfter(duplicate, original);
}

function insertAfter(newElement, targetElement)
{
    var parent = targetElement.parentNode;
    if (parent.lastChild == targetElement)
    {
        parent.appendChild(newElement);
    }
    else
    {
        parent.insertBefore(newElement, targetElement.nextSibling);
    }
}
4

0 に答える 0