เติมกล่องเลือกในการเลือกก่อนหน้าและด้วยโคลน

ฉันกำลังพยายามเพิ่มฟังก์ชันการโคลนสำหรับกล่องที่เลือก ฉันมีกล่องเลือก 3 ช่อง: ประเทศ รัฐ เมือง และผู้ใช้รายแรกเลือกประเทศ และกล่องเลือกสถานะตามรหัสจะเต็มไปด้วยตัวเลือกต่างๆ และแบบเดียวกับเมืองแบบเลื่อนลงจะเติมเฉพาะเมื่อมีการเลือกรัฐเท่านั้น

จากนั้นฉันก็ได้เพิ่มตัวเลือกเพิ่มเติมโดยที่ฉันสร้างทุกอย่างขึ้นมาใหม่ ดังนั้นฉันจึงโคลน div ของฉัน แต่ปัญหาเมื่อฉันเปลี่ยนประเทศแทนที่จะแสดงสถานะใหม่แบบเลื่อนลง กลับไปสู่แบบเลื่อนลงก่อนหน้า:

  $('.country').on('change',function(){
        var id = $(this).val();
        callAjax(id);
    });
    $('.state').on('change',function(){
        var id = $(this).val();
        callAjax(id);
    });

  $('#btClone').on('click', function () {

        $('#country')
            .clone()
            .attr('id', 'country_' + i)
            .attr('name', 'country_' + i)
            .appendTo("#container2");
        $('#state')
            .clone()
            .attr('id', 'state_' + i)
            .attr('name', 'state_' + i)
            .appendTo("#container2");
      i =i+1;
    });

Html ของฉันดูเหมือนว่า

 <div id="container1">
                <select id="country" name="country" class="hidden country">
                </select>
                <select id="state" name="state" class="hidden state">
                </select>
                <select id="city" name="city" class="hidden city">
                </select>
             <span id="selected-profile"></span>
             <div id="addons" class="hidden">

                <input type="button" id="btClone" value="Clone the list" style="float:right;" />
             </div>
         </div>
        <div id="container2" style="display:none;"></div>

ฉันต้องการเมื่อฉันคลิกเพิ่มใหม่ จากนั้นเลือกประเทศ แล้วเปลี่ยนสิ่งที่โทร ajax ของฉันโทรอีกครั้ง แต่ ณ ตอนนี้ฉันไม่สามารถทำเช่นนั้นได้เพราะฉันมีตัวเลือกอยู่แล้ว


person Daniel_12    schedule 27.06.2018    source แหล่งที่มา
comment
ฉันในตัวจัดการคลิกของคุณมาจากไหน ควรมีข้อผิดพลาด   -  person C4pt4inC4nn4bis    schedule 27.06.2018
comment
ตัวแปรระดับโลกของมัน   -  person Daniel_12    schedule 27.06.2018


คำตอบ (1)


คุณหมายถึงอะไรกันแน่กับ "แทนที่จะแสดงสถานะใหม่แบบเลื่อนลง กลับไปสู่แบบเลื่อนลงก่อนหน้า" ฉันลองใช้รหัสของคุณแบบซอและมันก็ทำการโคลนตามที่คาดไว้

function initRow($row){
  $row.find('select[name="country"]').on('change', function () {
      var thisRow = $(this).closest('div.row');
      var stateDD = thisRow.find($('select[name="state"]'));
      stateDD.show();

      stateDD.on('change',function(){
        var cityDD = thisRow.find('select[name="city"]');
        cityDD.show();
        cityDD.on('change',function(){

        });
      });
  });
}
$('#container1 .row').each(function(){
	initRow($(this));
});
$('#btClone').click(function(){
	var rowTemplate = $('#container1 > .row').eq(0).clone();
  rowTemplate.find('select[name="state"]').hide();
  rowTemplate.find('select[name="city"]').hide();
	initRow(rowTemplate.appendTo($('#container1')));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container1">
  <div class="row">
    <select name="country" class="hidden country">
      <option value=1>country 1</option> <option value=2>country 2</option>
    </select>
    <select name="state" class="hidden state" style="display:none;">
      <option value=1>state 1</option> <option value=2>state 2</option>
    </select>
    <select name="city" class="hidden city" style="display:none;">
       <option value=1>city 1</option> <option value=2>city 2</option>
    </select>
  </div>
</div>
<input type="button" id="btClone" value="Clone the list" style="float:right;" />

person C4pt4inC4nn4bis    schedule 27.06.2018
comment
ใช่มันเป็นการโคลน แต่ไม่ใช่วิธีที่ฉันต้องการ ฉันต้องการเมื่อฉันคลิกเพิ่มใหม่จากนั้นแสดงประเทศแบบเลื่อนลงและเมื่อฉันเปลี่ยนประเทศจากนั้นระบุสถานะการแสดงแบบเลื่อนลงพร้อมตัวเลือกและเหมือนกันกับสถานะแบบเลื่อนลง - person Daniel_12; 27.06.2018
comment
โอเค คุณไม่ได้เขียนโค้ดนั้น เพื่อให้บรรลุเป้าหมายนั้น จะต้องแทรกรายการแบบเลื่อนลงที่สองเมื่อเปลี่ยนรายการแรก ฉันอัพเดตโค้ดตัวอย่างแล้ว - person C4pt4inC4nn4bis; 27.06.2018
comment
ฉันต้องการใช้วิธี ajaxcall เดียวกันและฉันไม่แน่ใจว่าจะใช้งานคุณสมบัตินั้นได้อย่างไร - person Daniel_12; 27.06.2018
comment
สร้างตรรกะเพื่อผนวกรายการดรอปดาวน์ใหม่ก่อน กว่าเพิ่มฟังก์ชัน ajax ของคุณให้กับเหตุการณ์การเปลี่ยนแปลง เป็นขั้นเป็นตอน - person C4pt4inC4nn4bis; 27.06.2018
comment
ฟังก์ชันโคลนนี้กำลังต่อท้ายดรอปดาวน์ ถ้าฉันพูดถูก? ขออภัยฉันยังใหม่กับการเขียนโปรแกรมดังนั้นจึงไม่รู้เรื่องนี้มากนัก - person Daniel_12; 27.06.2018
comment
clone() เพิ่มองค์ประกอบ html เป็นสองเท่า append() ผนวกเข้ากับองค์ประกอบ html ที่อ้างอิง การเปลี่ยนแปลงเป็นเหตุการณ์อื่นที่ไม่ใช่การคลิก ดูตัวอย่างที่อัปเดตของฉันด้านบน - person C4pt4inC4nn4bis; 27.06.2018
comment
เมื่อฉันคลิกที่ปุ่มเพิ่ม จากนั้นคลิกที่ประเทศเพื่อเปลี่ยนโดยเพิ่มสถานะใหม่แบบเลื่อนลงและตัวเลือกแบบเลื่อนลงสถานะก่อนหน้า - person Daniel_12; 27.06.2018
comment
ถ้าฉันเปลี่ยนประเทศ 5 ครั้ง มันจะเพิ่มสถานะใหม่ 5 รายการแบบเลื่อนลง - person Daniel_12; 27.06.2018
comment
ใช่แล้ว เพราะมันถูกโปรแกรมไว้แบบนั้น คุณต้องเรียนรู้พื้นฐานของ jquery-events เพื่อถามคำถามเฉพาะ ทุกสิ่งที่คุณต้องการเพื่อให้บรรลุความต้องการของคุณอยู่ในตัวอย่างด้านบน - person C4pt4inC4nn4bis; 27.06.2018
comment
ไม่มีปัญหา! ต้องการความช่วยเหลือเมื่อคุณมีคำถามเพิ่มเติม ในระหว่างนี้ คุณช่วยโหวตตอบคำตอบของฉันได้ไหม - person C4pt4inC4nn4bis; 27.06.2018
comment
บัดดี้คุณช่วยฉันหน่อยได้ไหม ฉันจะเพิ่มดรอปดาวน์เพียงอันเดียวได้อย่างไรหากมีดรอปดาวน์อยู่แล้ว ฉันติดอยู่ - person Daniel_12; 27.06.2018
comment
ด้วย $(this).off(change); สามารถทำได้ :) - person Daniel_12; 27.06.2018
comment
ตกลง ฉันอัปเดตตัวอย่างอีกครั้ง - หวังว่าเหมาะกับความต้องการของคุณ - person C4pt4inC4nn4bis; 27.06.2018
comment
แต่เราจำเป็นต้องทำให้ตัวเลือกไดนามิกเพื่อใส่ค่าตัวเลือกใช่ไหม ณ ตอนนี้ทุกอย่าง (id ชื่อ) จะเหมือนกันสำหรับทุกดรอปดาวน์ - person Daniel_12; 27.06.2018
comment
เพียงเพิ่มการเรียกใช้ฟังก์ชันสำหรับทุกดรอปดาวน์ซึ่งจะคืนค่าสำหรับการเลือกเฉพาะนั้นโดยส่งประเภทเช่น city ​​และฟังก์ชันส่งคืนอาร์เรย์ของเมือง - person C4pt4inC4nn4bis; 27.06.2018
comment
ใช่ ฉันทำแบบเดียวกันในการเรียก ajaxcall(id,state) แต่ในวิธีที่สำเร็จของ ajax ต่อท้ายข้อมูลเช่น $(data.success).each(function( index, element ) { $('#'+selectId).append('‹‹ ค่าตัวเลือก=' + element.entity_id + '›' + element.name + '‹/option›'); }); แต่รหัสนี้ไม่ซ้ำกัน ดังนั้นเมื่อฉันเปลี่ยนประเทศในฟิลด์โคลน สถานะลดลงจะได้รับตัวเลือกก่อนหน้าแล้ว - person Daniel_12; 27.06.2018