isi kotak pilih pada pilihan sebelumnya dan dengan klon

Saya mencoba menambahkan fungsionalitas kloning untuk kotak pilihan. Saya memiliki 3 kotak pilih: negara, negara bagian, kota dan pengguna pertama memilih negara dan berdasarkan id kotak pilih negara bagian diisi dengan opsi dan sama dengan dropdown kota hanya akan terisi ketika negara bagian dipilih.

Kemudian saya menambahkan lebih banyak opsi di mana saya telah membuat ulang semuanya. jadi saya mengkloning div saya tetapi masalahnya ketika saya mengubah negara saya alih-alih menampilkan dropdown negara bagian baru, ia kembali ke drop down sebelumnya:

  $('.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 saya terlihat seperti

 <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>

Saya ingin ketika saya mengklik tambahkan baru lalu pilih negara lalu ubah sesuatu, panggil ajax saya lagi, tetapi sampai sekarang saya tidak dapat melakukan itu karena saya sudah punya opsi


person Daniel_12    schedule 27.06.2018    source sumber
comment
Dari mana asal saya di penangan klik Anda? Seharusnya ada kesalahan.   -  person C4pt4inC4nn4bis    schedule 27.06.2018
comment
variabel globalnya   -  person Daniel_12    schedule 27.06.2018


Jawaban (1)


apa sebenarnya yang Anda maksud dengan "alih-alih menampilkan dropdown status baru, ia kembali ke drop down sebelumnya". Saya mencoba kode Anda dengan mudah dan mengkloning seperti yang diharapkan.

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
Ya itu kloning tapi tidak seperti yang saya inginkan. Saya ingin ketika saya mengklik tambahkan baru lalu tampilkan tarik-turun negara dan ketika saya mengubah negara maka tarik-turun negara bagian ditampilkan dengan opsi dan sama dengan tarik-turun negara bagian. - person Daniel_12; 27.06.2018
comment
Oke, Anda tidak mengkodekannya. Untuk mencapainya, dropdown kedua harus disisipkan ON CHANGE dari dropdown pertama. Saya memperbarui kode contoh. - person C4pt4inC4nn4bis; 27.06.2018
comment
Saya ingin menggunakan metode ajaxcall yang sama dan saya tidak yakin bagaimana cara mengimplementasikan fitur itu - person Daniel_12; 27.06.2018
comment
Bangun logika untuk menambahkan dropdown baru terlebih dahulu. Kemudian tambahkan fungsi ajax Anda ke acara perubahan. Selangkah demi selangkah - person C4pt4inC4nn4bis; 27.06.2018
comment
Fungsi klon ini menambahkan dropdown. Jika saya benar? maaf saya sangat baru dalam pemrograman jadi tidak tahu banyak tentang ini - person Daniel_12; 27.06.2018
comment
clone() menggandakan elemen html. append() menambahkannya ke elemen html yang direferensikan. perubahan adalah peristiwa lain selain klik. Lihat contoh saya yang diperbarui di atas - person C4pt4inC4nn4bis; 27.06.2018
comment
Ketika saya mengklik tombol tambahkan lebih banyak lalu klik negara untuk mengubahnya dengan menambahkan drop-down negara bagian baru dan dengan opsi drop-down negara bagian sebelumnya - person Daniel_12; 27.06.2018
comment
jika saya mengubah 5 kali negara maka itu menambahkan 5 drop down negara bagian baru - person Daniel_12; 27.06.2018
comment
ya karena diprogram seperti itu. Anda harus mempelajari dasar-dasar jquery-events untuk menghasilkan pertanyaan spesifik. Semua yang Anda perlukan untuk memenuhi kebutuhan Anda ada pada contoh di atas. - person C4pt4inC4nn4bis; 27.06.2018
comment
Tidak masalah! Ingin membantu ketika Anda mengajukan pertanyaan lain. Sementara itu - maukah Anda memberi suara positif pada jawaban saya? - person C4pt4inC4nn4bis; 27.06.2018
comment
Sobat bisa bantu saya bagaimana caranya menambahkan hanya satu dropdown jika sudah ada dropdown. aku terjebak - person Daniel_12; 27.06.2018
comment
dengan $(ini).off(perubahan); mampu melakukan ini :) - person Daniel_12; 27.06.2018
comment
Oke, saya memperbarui contoh sekali lagi - saya harap sesuai dengan kebutuhan Anda. - person C4pt4inC4nn4bis; 27.06.2018
comment
tapi kita perlu membuat pemilih dinamis untuk memberikan nilai opsi, bukan? sampai sekarang semuanya (id, nama) sama untuk setiap drop down - person Daniel_12; 27.06.2018
comment
Cukup tambahkan pemanggilan fungsi untuk setiap dropdown yang akan mengembalikan nilai untuk pilihan spesifik tersebut dengan meneruskan tipe mis. city ​​dan fungsinya mengembalikan array kota. - person C4pt4inC4nn4bis; 27.06.2018
comment
Ya, saya melakukan panggilan yang sama ajaxcall(id,state) tetapi dalam metode sukses ajax menambahkan data seperti $(data.success).each(function( index, element ) { $('#'+selectId).append('‹ nilai opsi=' + elemen.entity_id + '›' + elemen.nama + '‹/option›'); }); Tapi id ini tidak unik jadi ketika saya mengubah negara di bidang kloning maka penurunan negara sudah mendapatkan opsi sebelumnya - person Daniel_12; 27.06.2018