bugfix> javascript > 投稿

Bootstrapを使用してページをデザインしています。私はこのページをフォローしていますhttp://skote-light.node.themesbrand.com/form-advanced を作成するには複数選択

<script src="~/assets/js/pages/form-advanced.init.js"></script>
<div class="row mt-3">
<div class="col-lg-12">
<div class="form-group">
<label for="basicpill-firstname-input">Countries/Regions (You may add more countries/regions)</label>
<select class="select2 form-control select2-multiple" multiple="multiple" data-placeholder="Choose ...">
<option value="SG">Singapore</option>
<option value="CH">China</option>
<option value="CA">California</option>
</select>
</div>
</div>
<div id="add-more">Add More<div>

これへの出力は

要件は、複数選択を追加するために、[追加]ボタンが必要なことです。 だから私がしたことは

$("#add-more").click(function () {
    $("#add-more").before(
`
<div class="row mt-3">
<div class="col-lg-12">
<div class="form-group">
<label for="basicpill-firstname-input">Countries/Regions (You may add more countries/regions)</label>
<select class="select2 form-control select2-multiple" multiple="multiple" data-placeholder="Choose ...">
<option value="SG">Singapore</option>
<option value="CH">China</option>
<option value="CA">California</option>
</select>
</div>
</div>
`

問題は、JavaScriptを使用して追加しようとすると、複数選択がこのように動作することです。つまり、ブートストラッププロパティは適用されません。

おそらくJavaScriptを使用して追加している間は、JavaScriptスクリプトを使用できません。

この問題を解決するのを手伝ってください。 ありがとう。

回答 2 件
  • 初期化する必要があります select2 これは動的に追加されるため、簡単に使用できます $('.select2-multiple:last').select2() これにより、最後の選択ボックスが検索され、初期化されます。

    デモコード

    $(".select2-multiple").select2();
    $("#add-more").click(function() {
      $("#add-more").before(
        `
    <div class="row mt-3">
    <div class="col-lg-12">
    <div class="form-group">
    <label for="basicpill-firstname-input">Countries/Regions (You may add more countries/regions)</label>
    <select class="select2 form-control select2-multiple" multiple="multiple" data-placeholder="Choose ...">
    <option value="SG">Singapore</option>
    <option value="CH">China</option>
    <option value="CA">California</option>
    </select>
    </div>
    </div>
    `)
      //initialize selct2 which is added last
      $('.select2-multiple:last').select2();
    });
    
    
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2@4.1.0-beta.1/dist/css/select2.min.css">
    <script src="https://code.jquery.com/jquery-3.5.0.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-beta.1/dist/js/select2.min.js"></script>
    <div class="row mt-3">
      <div class="col-lg-12">
        <div class="form-group">
          <label for="basicpill-firstname-input">Countries/Regions (You may add more countries/regions)</label>
          <select class="select2 form-control select2-multiple" multiple="multiple" data-placeholder="Choose ...">
            <option value="SG">Singapore</option>
            <option value="CH">China</option>
            <option value="CA">California</option>
          </select>
        </div>
      </div>
      <div id="add-more">Add More
        <div>
    
    

  • 作業コード

    window.onload = function () {
    // no need to initialize here.
    //$('.select2-multiple').select2();
    });
    
    $("#add-more").click(function () {
        $("#add-more").before(
    `
    <div class="row mt-3">
    <div class="col-lg-12">
    <div class="form-group">
    <label for="basicpill-firstname-input">Countries/Regions (You may add more countries/regions)</label>
    <select class="select2 form-control select2-multiple" multiple="multiple" data-placeholder="Choose ...">
    <option value="SG">Singapore</option>
    <option value="CH">China</option>
    <option value="CA">California</option>
    </select>
    </div>
    </div>
    `);
    //$('.select2-multiple:last').select2();
    //initialize here instead
    $('.select2-multiple').select2();
    });
    
    

あなたの答え