Memicu perubahan acara drop-down

86

Saya ingin memicu peristiwa perubahan dropdown di $ (dokumen). Sudah menggunakan jquery.

Saya memiliki dropdown berjenjang untuk negara dan negara bagian di halaman detail pengguna. bagaimana cara mengatur nilai (yang diambil dari DB berdasarkan id pengguna) untuk negara dan negara bagian di MVC dengan C #.

Prasad
sumber
Anda mungkin ingin meletakkan beberapa tag lagi seperti javascript dan jQuery agar ini ditemukan lebih banyak
xenon

Jawaban:

185

Saya tidak tahu banyak JQuery tetapi saya pernah mendengarnya memungkinkan untuk mengaktifkan peristiwa asli dengan sintaks ini.

$(document).ready(function(){

    $('#countrylist').change(function(e){
       // Your event handler
    });

    // And now fire change event when the DOM is ready
    $('#countrylist').trigger('change');
});

Anda harus mendeklarasikan penangan peristiwa perubahan sebelum memanggil trigger () atau change () jika tidak maka tidak akan diaktifkan. Terima kasih telah menyebutkan @LenielMacaferi.

Informasi lebih lanjut di sini .

Christophe Eblé
sumber
13
Anda harus mendeklarasikan penangan peristiwa perubahan sebelum memanggil trigger()atau bahkan change()seperti yang ditunjukkan dengan benar dalam jawaban ini, yaitu, jika kode penangan peristiwa muncul di bawah panggilan, tidak ada yang terjadi! :)
Leniel Maccaferri
3
@LenielMacaferi Terima kasih telah menyelamatkan saya satu atau dua jam.
Frank Nocke
@Christophe Eblé & Leniel Macaferi, Terima kasih banyak. Christophe, bisakah Anda menambahkan komentar Leniel pada jawaban Anda?
Zaxter
Saya menggunakan .change () tetapi tidak berhasil dengan jquery 3.1.1, Setelah posting ini memicu seperti yang diharapkan.
Sorangwala Abbasali
Ini hanya berakhir dengan perulangan tanpa henti, solusi semua orang untuk ini berakhir dengan perulangan.
Nathan McKaskle
12

Coba ini:

$(document).ready(function(event) {
    $('#countrylist').change(function(e){
         // put code here
     }).change();
});

Tentukan peristiwa perubahan, dan segera picu. Ini memastikan event handler didefinisikan sebelum memanggilnya.

Mungkin terlambat untuk menjawab poster asli, tetapi orang lain mungkin mendapat manfaat dari notasi singkatan, dan ini mengikuti rangkaian jQuery, dll.

jquery chaining

mlnyc
sumber
7

Coba ini:

$('#id').change();

Bekerja untuk saya.

Pada satu baris bersama dengan pengaturan nilai: $('#id').val(16).change();

d. popov
sumber
3
$ ('# id'). val (16) .change (); melakukannya untuk saya.
TomoMiha
1
Terima kasih, @TomoMiha. Menambahkannya dalam jawaban.
d.popov
2

Jika Anda mencoba untuk menghubungkan drop-down, cara terbaik untuk melakukannya adalah memiliki skrip yang mengembalikan kotak pilih prebuilt dan panggilan AJAX yang memintanya.

Berikut adalah dokumentasi untuk metode Ajax jQuery jika Anda membutuhkannya.

$(document).ready(function(){

    $('#countrylist').change(function(e){
        $this = $(e.target);
        $.ajax({
            type: "POST",
            url: "scriptname.asp", // Don't know asp/asp.net at all so you will have to do this bit
            data: { country: $this.val() },
            success:function(data){
                $('#stateBoxHook').html(data);
            }
        });
    });

});

Kemudian buat rentang di sekitar kotak pilih negara bagian Anda dengan id "stateBoxHook"

xenon
sumber
Saya memiliki dropdown bertingkat: <% = Html.DropDownList ("MyCountries", "--- Select Country ---")%> <% = Html.CascadingDropDownList ("MyStates", "MyCountries")%> Saya dapat menyetel nilai MyCountries sebagai $ ("# MyCountries"). val ('<% = Model.CountryId%>'); di $ (dokumen) .ready. Tetapi saya tidak dapat menyetel nilai untuk negara bagian karena hanya menampilkan satu opsi "Pilih Negara Bagian", yang harus diisi pada acara pertukaran negara karena mereka adalah tarik-turun berjenjang. Ini adalah masalah sebenarnya.
Prasad
Masih tidak yakin apa yang Anda cari. Apakah Anda mencoba untuk mencapai sistem di mana mereka memilih sebuah negara dan itu mempersempit daftarnya menjadi negara bagian di negara itu? Jika ini masalahnya, Anda perlu melakukan panggilan AJAX ke server dan mengirimkan negara yang dipilih dan kemudian mengembalikan daftar negara bagian di negara itu.
xenon
Saya telah menetapkan USA sebagai Country & Alabama sebagai State yang merupakan dropdown cascading, sambil menambahkan profil pengguna. Dan ketika saya kembali ke halaman itu untuk Mengedit bidang, saya perlu Negara dan Negara Bagian untuk diisi dengan nilai yang telah saya tetapkan sebelumnya. Saya tidak memiliki masalah dalam menambahkan profil pengguna, ketika saya kembali ke halaman untuk Edit, saya dapat mengatur nilai untuk dropdown Negara dan di dropdown negara nilai tidak diisi karena itu adalah cascading yang mengisi nilai negara mengubah acara. Untuk ini saya perlu memicu peristiwa perubahan negara agar negara terisi dan saya dapat mengatur negara
Prasad
Mengapa demikian? Anda tahu apa negaranya pada waktu buka halaman sehingga Anda dapat membuat daftar pilih negara bagian yang benar dengan negara bagian yang benar dipilih. Ketika Anda mengubah negara, daftar tetap akan dimuat ulang.
xenon
1

sebagai alternatif Anda dapat meletakkan atribut onchange pada daftar dropdown itu sendiri, bahwa onchange akan memanggil fungsi jquery tertentu seperti ini.

<input type="dropdownlist" onchange="jqueryFunc()">

<script type="text/javascript">
$(function(){
    jqueryFunc(){
        //something goes here
    }
});
</script>

harap yang ini membantu Anda, dan harap perhatikan bahwa kode ini hanyalah draf kasar, tidak diuji pada ide apa pun. Terima kasih

dave
sumber
Ini tidak memicu peristiwa perubahan saat halaman pertama kali dimuat (sesuai pertanyaan OP)
0

Untuk beberapa alasan, jQuerysolusi lain yang disediakan di sini berfungsi saat menjalankan skrip dari konsol, namun tidak berfungsi untuk saya saat dipicu dari Chrome Bookmarklets .

Untungnya, solusi Vanilla JS ini ( triggerChangeEventfungsi) berhasil:

/**
  * Trigger a `change` event on given drop down option element.
  * WARNING: only works if not already selected.
  * @see /programming/902212/trigger-change-event-of-dropdown/58579258#58579258
  */
function triggerChangeEvent(option) {
  // set selected property
  option.selected = true;
  
  // raise event on parent <select> element
  if ("createEvent" in document) {
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent("change", false, true);
    option.parentNode.dispatchEvent(evt);
  }
  else {
    option.parentNode.fireEvent("onchange");
  }
}

// ################################################
// Setup our test case
// ################################################

(function setup() {
  const sel = document.querySelector('#fruit');
  sel.onchange = () => {
    document.querySelector('#result').textContent = sel.value;
  };
})();

function runTest() {
  const sel = document.querySelector('#selector').value;
  const optionEl = document.querySelector(sel);
  triggerChangeEvent(optionEl);
}
<select id="fruit">
  <option value="">(select a fruit)</option>
  <option value="apple">Apple</option>
  <option value="banana">Banana</option>
  <option value="pineapple">Pineapple</option>
</select>

<p>
  You have selected: <b id="result"></b>
</p>
<p>
  <input id="selector" placeholder="selector" value="option[value='banana']">
  <button onclick="runTest()">Trigger select!</button>
</p>

Domi
sumber