1

この形式で動的ドロップダウンを生成したい:

 <div class="row"> //first row containing 2 dynamic Dropdown 
                <div class="col-md-3 col-xs-12 col-sm-12  form-group">
                 <select id="field1">
                </div>
                <div class="col-md-3 col-xs-12 col-sm-12  form-group">
                 <select id="field1">
                </div>
 </div>
 <div class="row"> //second row containing 2 dynamic Dropdown 
                <div class="col-md-3 col-xs-12 col-sm-12  form-group">
                 <select id="field2">
                </div>
                <div class="col-md-3 col-xs-12 col-sm-12  form-group">
                 <select id="field2">
                </div>
 </div>

等......

出力フォーマット:

ここに画像の説明を入力

各行の最後にボタンを削除したい

 var cnt = 1;
function AddRow() {
        var fieldWrapper1 = $("<div class='col-md-4 col-xs-12 col-sm-12' id='field" + cnt + "'/>");
        var fieldWrapper2 = $("<div class='col-md-4 col-xs-12 col-sm-12' id='field" + cnt + "'/>");
        var fieldWrapper3 = $("<div class='col-md-4 col-xs-12 col-sm-12' id='field" + cnt + "'/>");
        var fieldWrapper4 = $("<div class='col-md-4 col-xs-12 col-sm-12' id='field" + cnt + "'/>");
        var fName1 = $("<select class='fieldname' id='drpdownCourse" + cnt + "'  name='drpdownCourseNm" + cnt + "'  />");
        var fName2 = $("<select class='fieldname' id='drpdownSubCourse" + cnt + "'  name='drpdownSubCourseNm" + cnt + "'  />");
        var fName3 = $("<select class='fieldname' id='drpdownSubject" + cnt + "'  name='drpdownSubjectNm" + cnt + "'  />");
        var removeButton = $("<img class='remove' src='../remove.png' />");

        fieldWrapper1.append(fName1);
        fieldWrapper2.append(fName2);
        fieldWrapper3.append(fName3);
        fieldWrapper4.append(removeButton);
        $("#FieldContainer").append(fieldWrapper1);
        $("#FieldContainer").append(fieldWrapper2);
        $("#FieldContainer").append(fieldWrapper3);
        $("#FieldContainer").append(fieldWrapper4);
        cnt = cnt + 1;
    }

  $(document).on('click', "img.remove", function () {
        $(this).parent().fadeOut(1000, function () {
            var id = $(this).attr("id").substr(5);
            
            $(this).remove();
        });
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
  <div class="row" id="FieldContainer">
   </div>
<a onclick="AddRow()" href="#">+ Add </a>

削除ボタンも行全体を削除していません。削除ボタンをクリックすると、その行全体(2つのドロップダウンを含む)のみが削除されます。

4

4 に答える 4

2

次のようにするとよいでしょう:

http://jsfiddle.net/4gsnewbv/

あなたのJS:

.......


    fieldWrapper1.append(fName1);
    fieldWrapper2.append(fName2);
    fieldWrapper3.append(fName3);
    fieldWrapper4.append(removeButton);
    var newRow = $('<div class="row" id=""></div>');


    $(newRow).append(fieldWrapper1);
    $(newRow).append(fieldWrapper2);
    $(newRow).append(fieldWrapper3);
    $(newRow).append(fieldWrapper4);
    $("body").append(newRow); // I am assuming it will be a direct child of body. If not, use the appropriate ID or Class
......

したがって、ドロップダウンの行を追加するたびに、内部にネストされます

<div class="row" id="">
    ...Your dropdowns and image goes here...
</div>

だから全体的に似ている

<body>
    <div class="row" id="">
       ...Your dropdowns and image goes here...
    </div>

    <div class="row" id="">
       ...Your dropdowns and image goes here...
    </div>

    and so on...     

</body>

次に、jQueryclosestセレクターを使用してクラスを持つ親を見つけ、rowその特定の行を削除します。

 $(document).on('click', "img.remove", function () {
    $(this).closest(".row").fadeOut(1000, function () {  //targets the entire row of dropdowns
        var id = $(this).attr("id").substr(5);

        $(this).remove();
    });
});

編集:追加ボタンの前に新しい行が必要な場合:

....
   $(newRow).insertBefore($(".add-more").parent()); 
....
于 2015-10-09T05:28:33.023 に答える
1

var cnt = 1;
function AddRow() {
        var fieldWrapper1 = $("<div class='col-md-4 col-xs-12 col-sm-12' id='field" + cnt + "'/>");
        var fieldWrapper2 = $("<div class='col-md-4 col-xs-12 col-sm-12' id='field" + cnt + "'/>");
        var fieldWrapper3 = $("<div class='col-md-4 col-xs-12 col-sm-12' id='field" + cnt + "'/>");
        var fieldWrapper4 = $("<div class='col-md-4 col-xs-12 col-sm-12' id='field" + cnt + "'/>");
        var fName1 = $("<select class='fieldname' id='drpdownCourse" + cnt + "'  name='drpdownCourseNm" + cnt + "'  />");
        var fName2 = $("<select class='fieldname' id='drpdownSubCourse" + cnt + "'  name='drpdownSubCourseNm" + cnt + "'  />");
        var fName3 = $("<select class='fieldname' id='drpdownSubject" + cnt + "'  name='drpdownSubjectNm" + cnt + "'  />");
        var removeButton = $("<img class='remove' src='http://icons.iconseeker.com/png/fullsize/web-development-3/action-delete-sharp-thick.png' />");

        fieldWrapper1.append(fName1);
        fieldWrapper1.append(fName2);
        fieldWrapper1.append(fName3);
  fieldWrapper1.append(removeButton.clone());
        
        $("#FieldContainer").append(fieldWrapper1);
        $("#FieldContainer").append(fieldWrapper2);
        $("#FieldContainer").append(fieldWrapper3);
        $("#FieldContainer").append(fieldWrapper4);
        cnt = cnt + 1;
    }

  $(document).on('click', "img.remove", function () {
        $(this).parent().fadeOut(1000, function () {
            var id = $(this).attr("id").substr(5);
            
            $(this).remove();
        });
    
    });
AddRow();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
  <div class="row" id="FieldContainer">
   </div>
<a onclick="AddRow()" href="#">+ Add </a>

于 2015-10-09T05:32:45.063 に答える
1

ユーザーが「追加」をクリックするたびに2つのドロップダウンと削除ボタンを含む行を追加する場合は、次のことを試してください。( https://jsfiddle.net/0npzqr1a/4/ )

var cnt = 1;
function AddRow() {

        var rowWrapper = $('<div class="row" id="FieldContainer"></div>');

        var fieldWrapper1 = $("<div class='col-md-4 col-xs-12 col-sm-12'/>");
        var fieldWrapper2 = $("<div class='col-md-4 col-xs-12 col-sm-12'/>");
        var fName1 = $("<select class='fieldname' id='drpdownCourse" + cnt + "'  name='drpdownCourseNm" + cnt + "'  />");
        var fName2 = $("<select class='fieldname' id='drpdownSubCourse" + cnt + "'  name='drpdownSubCourseNm" + cnt + "'  />");
        var removeButton = $("<img class='remove' src='../remove.png' />");

        fieldWrapper1.append(fName1);       
        fieldWrapper2.append(fName2);
        rowWrapper.append(fieldWrapper1);
        rowWrapper.append(fieldWrapper2);
        rowWrapper.append(removeButton);

        $("#FieldContainer").append(rowWrapper);
        cnt = cnt + 1;
    }

  $(document).on('click', "img.remove", function () {
        $(this).closest('.row').fadeOut(1000, function () {
            var id = $(this).attr("id").substr(5);

            $(this).remove();
        });
    });

  $(document).on('click', "a#add", function () {
        AddRow();
    });

そしてhtml、

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="row" id="FieldContainer">
</div>
<a id="add" href="#">+ Add </a>
于 2015-10-09T05:45:28.653 に答える
1

html テンプレートを使用して、要素の追加と削除を行うことができます。

このためには、必要に応じて html テンプレートを作成するだけです。

<script type="text/template" id="rowtemplate">
        <div class="select-row row">
            <div class="col-md-3 col-xs-12 col-sm-12  form-group">
                <select id="field1"></select>
            </div>
            <div class="col-md-3 col-xs-12 col-sm-12  form-group">
                <select id="field1"></select>
            </div>
            <div>
                <a class="removeBtn">Remove</a>
            </div>
        </div>
    </script>

これで、各行を簡単に追加または削除できます。

add 関数は次のようになります。

<script>
    function AddRow() {
        $('#FieldContainer').append($('#rowtemplate').html());
    }
</script>

テンプレートの削除ボタンのクラス名について言及したことがわかります。したがって、各削除ボタンのクリック イベントを処理し、その html 要素を削除するだけです。

$(document).ready(function () {
    // click event for all remove button
    $('body').on('click', '.removeBtn', function () {
        $(this).closest('.select-row').remove();
    });
});

HTML テンプレートを使用すると、追加と削除がいかに簡単であるかがわかります。では、なぜ他の方法を使用する必要があるのでしょうか。

これがあなたを助けることを願っています。質問がある場合は、コメントしてください。

于 2015-10-09T05:46:22.667 に答える