Hal yang ingin saya capai adalah setiap kali <select>
dropdown diubah, saya ingin nilai dropdown sebelum perubahan. Saya menggunakan versi 1.3.2 dari jQuery dan menggunakan pada acara perubahan tetapi nilai yang saya dapatkan di sana adalah setelah perubahan.
<select name="test">
<option value="stack">Stack</option>
<option value="overflow">Overflow</option>
<option value="my">My</option>
<option value="question">Question</option>
</select>
Katakanlah saat ini opsi Saya dipilih sekarang ketika saya mengubahnya untuk menumpuk di acara onchange (yaitu ketika saya mengubahnya untuk menumpuk) Saya ingin itu nilai sebelumnya yaitu yang saya harapkan dalam kasus ini.
Bagaimana ini bisa dicapai?
Sunting: Dalam kasus saya, saya memiliki beberapa kotak pilih di halaman yang sama dan ingin hal yang sama diterapkan pada semuanya. Juga semua pilih saya dimasukkan setelah memuat halaman melalui ajax.
javascript
jquery
jquery-events
Alpesh
sumber
sumber
Jawaban:
Gabungkan acara fokus dengan acara perubahan untuk mencapai apa yang Anda inginkan:
Contoh kerja: http://jsfiddle.net/x5PKf/766
sumber
$(this).blur();
di akhir fungsi perubahantolong jangan gunakan global var untuk ini - simpan nilai prev pada data di sini adalah contoh: http://jsbin.com/uqupu3/2/edit
kode untuk ref:
hanya melihat bahwa Anda memiliki banyak pilihan pada halaman - pendekatan ini juga akan bekerja untuk Anda karena untuk setiap pilih Anda akan menyimpan nilai sebelumnya pada data pilih
sumber
jQuery.data
.select
! Jawaban yang diterima akan rusak karena cocok dengan semuaselect
tetapi hanya menyimpan nilai yang pertama.data
adalah cara yang lebih baik untuk melakukannya. +1 :)Saya memilih solusi Avi Pinto yang digunakan
jquery.data()
Menggunakan fokus bukanlah solusi yang valid. Ini bekerja pada saat pertama kali Anda mengubah opsi, tetapi jika Anda tetap pada elemen pilih itu, dan tekan tombol "atas" atau "bawah". Itu tidak akan melalui acara fokus lagi.
Jadi solusinya harus lebih mirip seperti berikut,
sumber
var $selectStatus = $('.my-select'); $selectStatus.on('change', function () { var newStatus = $(this).val(); var oldStatus = $(this).data('pre'); }).data('pre', $selectStatus.val());
$('mySelect').data('pre', $(this).val());
Seharusnya:$('mySelect').each(function() { $(this).data('pre', $(this).val()); });
Saya tidak punya cukup reputasi untuk mengedit jawaban: /Lacak nilainya dengan tangan.
sumber
sumber
Saya menggunakan acara "langsung", solusi saya pada dasarnya serupa dengan Dimitiar, tetapi alih-alih menggunakan "fokus", nilai saya sebelumnya disimpan ketika "klik" dipicu.
sumber
menjaga nilai drop-down yang dipilih saat ini dengan jquery yang dipilih dalam variabel global sebelum menulis fungsi aksi drop-down 'saat perubahan'. Jika Anda ingin menetapkan nilai sebelumnya dalam fungsi Anda dapat menggunakan variabel global.
sumber
Bagaimana dengan menggunakan acara jQuery khusus dengan antarmuka jenis jam tangan sudut;
sumber
Saya tahu ini adalah utas lama, tetapi saya pikir saya dapat menambahkan sedikit tambahan. Dalam kasus saya, saya ingin menyampaikan teks, val, dan beberapa data lainnya. Dalam hal ini lebih baik menyimpan seluruh opsi sebagai nilai prev daripada hanya val.
Contoh kode di bawah ini:
EDIT:
Saya lupa menambahkan .clone () ke elemen. dalam tidak melakukannya ketika Anda mencoba untuk menarik kembali nilai-nilai yang Anda akhirnya menarik dalam salinan yang dipilih daripada yang sebelumnya. Menggunakan metode clone () menyimpan salinan pilih bukan turunannya.
sumber
Nah, mengapa Anda tidak menyimpan nilai yang dipilih saat ini, dan ketika item yang dipilih diubah, Anda akan memiliki nilai lama disimpan? (dan Anda dapat memperbaruinya lagi sesuai keinginan)
sumber
Gunakan kode berikut, saya telah mengujinya dan berfungsi
sumber
sumber
Saya ingin berkontribusi opsi lain untuk menyelesaikan masalah ini; karena solusi yang diusulkan di atas tidak menyelesaikan skenario saya.
Ini tidak menggunakan jQuery sehingga def. adalah ketergantungan di sini, tetapi ini dapat disesuaikan untuk bekerja di javascript murni. (Tambahkan pendengar ke badan, periksa apakah target awal adalah fungsi pilih, jalankan, ...).
Dengan melampirkan pendengar perubahan ke badan, Anda dapat yakin ini akan muncul setelah pendengar tertentu untuk memilih, jika tidak nilai 'data-sebelumnya' akan ditimpa sebelum Anda bahkan dapat membacanya.
Ini tentu saja dengan asumsi bahwa Anda lebih suka menggunakan pendengar yang terpisah untuk nilai set-sebelumnya dan nilai cek Anda. Ini cocok dengan pola tanggung jawab tunggal.
Catatan: Ini menambahkan fungsionalitas 'sebelumnya' ini ke semua pilihan , jadi pastikan untuk menyelaraskan pemilih jika diperlukan.
sumber
Ini merupakan peningkatan pada jawaban @thisisboris. Ini menambahkan nilai saat ini ke data, sehingga kode dapat mengontrol ketika variabel yang diatur ke nilai saat ini diubah.
sumber
Solusi terbaik:
sumber
Ada beberapa cara untuk mencapai hasil yang Anda inginkan, ini cara saya yang sederhana untuk melakukannya:
Biarkan elemen menyimpan nilai sebelumnya, jadi tambahkan atribut 'priorValue'.
Setelah diinisialisasi, 'Nilai sebelumnya' sekarang dapat digunakan sebagai atribut. Di JS, untuk mengakses Nilai sebelumnya dari ini pilih:
Setelah selesai menggunakan 'Nilai sebelumnya', perbarui atribut ke nilai saat ini.
sumber
Saya perlu mengungkapkan div yang berbeda berdasarkan seleksi
Ini adalah bagaimana Anda dapat melakukannya dengan sintaks jquery dan es6
HTML
JS
sumber