Chosen: html5 memerlukan dukungan atribut?

Dibuat pada 4 Mar 2012  ·  80Komentar  ·  Sumber: harvesthq/chosen

Ketika dipilih diinisialisasi pada input pilih, ia menambahkan [style=" display:none "] ke tag pilih dan membuat berbagai tag div yang dibutuhkan, sebagai berikut.

<select name="country" id="country" style="display: none; " class="chzn-done">
    <option selected="selected" value=""></option>
    ...
</select>

Ini baik-baik saja, tetapi kami memiliki masalah jika saya menambahkan atribut 'wajib' html5 ke tag pilih saya, yang menghasilkan markup berikut setelah inisialisasi yang dipilih:

<select name="country" id="country" required="required" style="display: none; " class="chzn-done">
<option selected="selected" value=""></option>
...
</select>

Masalah terjadi saat pengguna mengirimkan formulir tanpa memilih nilai. Bagi pengguna, browser sepertinya tidak melakukan apa-apa. Sebenarnya, ini menampilkan pesan kesalahan kepada pengguna untuk memilih nilai, tetapi karena CSS menginstruksikan browser untuk tidak menampilkan elemen pilih, pesan kesalahan juga tidak muncul.

Ini terjadi di Chrome, saya tidak yakin tentang perilaku browser lain.

Saya belum menggali cukup dalam untuk menyarankan solusi, tetapi ini adalah masalah saat kami mulai memasukkan atribut html5 dalam formulir kami.

Feature Request

Komentar yang paling membantu

+1

Adakah yang bisa melakukan perbaikan untuk ini? Ini masalah yang cukup lama dan fungsionalitas yang sangat penting saat ini. Terima kasih.

Semua 80 komentar

Saya juga baru-baru ini memperhatikan masalah ini.
Diperlukan tidak didukung di semua browser, jadi saya telah membuat mundur untuk mengulang elemen formulir saat dikirim dan memverifikasi bahwa ada beberapa nilai di sana ketika "diperlukan" ada.
Masalahnya masih ada di chrome karena pilihan tersembunyi tidak memiliki nilai dan tidak memperingatkan pengguna sesuai dengan dokumen webkit:
http://trac.webkit.org/wiki/Styling%20Form%20Controls

"Pesan validasi terdiri dari empat elemen div dengan kelas semu dan beberapa simpul untuk teks pesan. Anda dapat menyesuaikan tampilan dengan mengubah gaya kelas semu ini."

Saya berpikir cara terbaik untuk mengatasi ini adalah dengan memilih menghasilkan markup tambahan untuk pilihan yang diberikan dengan kelas serupa sehingga mereka akan ditata secara default di browser, atau berpotensi menambahkan elemen semu ke elemen yang gagal validasi oleh menggunakan kondisi gagal yang sesuai dalam CSS seperti :invalid.

Untuk saat ini, sepertinya satu-satunya pilihan Anda adalah memiliki fallback tingkat DOM seperti solusi javascript saya. Saya dapat memberikannya di sini jika itu akan membantu tetapi itu benar-benar mundur untuk dipilih, bukan cara untuk memperbaiki kerangka kerja yang dipilih.

Apa status masalah ini? Saya memiliki masalah yang sama persis dengan versi terakhir Firefox (14.0.1)

Karena atribut HTML5 semakin banyak digunakan di situs web, ini harus diatasi dengan cara atau yang lain.

Saya memiliki masalah yang sama juga. Saya ingin tahu solusi fallback Anda.

Terima kasih

Sepertinya hanya ada 1 masalah utama, dan masalah sekunder yang bagus untuk diperbaiki.

  • Jika elemen formulir tidak valid (tidak ada yang dipilih) browser akan menampilkan bendera kecil yang menunjukkan posisi kesalahan, dengan pesan yang mengatakan untuk mengisi bidang ini. Dengan dipilih, di Firefox, bendera pesan itu ada di kiri bawah jendela browser.
  • Tidak ada gaya yang ditentukan untuk bidang formulir yang tidak valid. Secara default di Firefox (bervariasi antar browser, tetapi semuanya melakukan hal yang serupa) Anda mendapatkan efek cahaya merah di sekitar setiap bidang formulir yang tidak valid. Kotak pilih yang dipilih tidak mendapatkan apa-apa.

Item pertama adalah yang lebih bermasalah. Bisakah ini diperbaiki dengan menggunakan metode penyembunyian elemen pilih yang berbeda? Mengganti " display:none " pada elemen pilih yang tersembunyi dengan "position: absolute;visibility: hidden;" menjadi cukup dekat - meskipun itu akan lebih tergantung pada CSS di sekitarnya ...

Ini tidak berfungsi untuk Webkit. Tampaknya tanda kesalahan mewarisi gaya kotak pilih di webkit (Chrome), jadi jika Anda menyetel opacity: .5, tandanya juga akan menjadi opacity .5 (sebagai salah satu contoh). kekecewaan.

Satu lagi - Opera berfungsi dengan benar apa adanya, tetapi jika saya mengubahnya ke CSS berbasis posisi di atas, maka itu tidak berfungsi dengan benar. Apa yang menyakitkan.

Maaf untuk spamming ini. Saya pikir saya mendapatkannya! Jika Anda membungkus elemen pilih dalam rentang, dan menggunakan CSS ini pada pembungkus (dan menghapus display:none pada elemen pilih):

width: 0px;
height: 0px;
overflow: hidden;
display: inline-block;
position: absolute;

Anda akan mendapatkan pesan kesalahan dan tidak ada pemutusan aliran halaman secara bersamaan. Satu-satunya masalah adalah Anda harus membiarkan kotak terlihat untuk melihat pesan kesalahan karena Firefox dan WebKit akan menyembunyikan pesan jika tidak. Ini menyebabkan kotak pilih menerima tab melalui formulir.

Cara mengatasinya mungkin dengan beralih tampilan dari tidak ada ke inline-block saat pengiriman (atau acara 'tidak valid'), lalu aktifkan kembali pada acara input tertentu (seperti mouse ke bawah atau penekanan tombol).

Ada juga masalah pemosisian kecil, yang dapat diselesaikan dengan memaksa posisi berada langsung di bawah kotak yang dipilih.

Akan menyenangkan melihat semacam dukungan bawaan untuk ini, jika memungkinkan.

Saya menulis tambalan di sini: https://github.com/adcSTUDIO/chosen

Ini mungkin tidak cukup kuat untuk dimasukkan, tetapi jangan ragu untuk mengujinya.

Terima kasih @CaptainN! Saya akan mengeceknya!

@CaptainN , saya berhasil - terima kasih telah membuat perubahan itu. Namun, tahukah Anda cara membiarkan lebar sembulan kesalahan melebihi lebar kotak pilih itu sendiri? Pada beberapa elemen pilih saya yang lebih kecil, pesan kesalahannya sangat tipis yang tidak terlihat sangat bagus, dan bahkan mungkin sulit dibaca pada beberapa elemen.

Jika tidak, tidak apa-apa, Anda sudah banyak membantu dengan ini. Terima kasih lagi!

@caderade Saya tidak yakin bagaimana cara memperbaiki masalah itu. Saya mencoba overflow:visible dan beberapa hal lainnya, dan masih muncul sebentar Saya akan mencoba beberapa hal lagi, tetapi ini terlihat seperti masalah dengan Firefox yang mungkin tidak memiliki solusi (flag ini umumnya cukup sulit untuk ditangani dengan, bersama dengan cahaya itu, yang belum saya temukan cara untuk menata sepenuhnya).

@CaptainN : Sangat bagus.

Ini bekerja cukup baik untuk saya di Firefox 17 dan Chrome 23.

Di IE 8+9 (yang sama sekali tidak mendukung validasi formulir HTML5), saat mengubah nilai bidang, saya mendapatkan kesalahan JavaScript karena selektor :valid dikenal digunakan. Dengan demikian skrip dibatalkan dan formulir tidak diperburuk dengan cara apa pun, yang saya harapkan di IE. :smirk: Tidak memunculkan kesalahan akan lebih baik. Ada ide?

Oh repot. Saya benar-benar berpikir jQuery akan lebih melindungi saya! Saya harus menambahkan cek IE atau sesuatu ...

Kevin N.

@CaptainN Ini memiliki masalah bagi saya di Chrome juga. Tidak yakin apakah menurut Anda itu hanya masalah Firefox atau bukan. Tapi kawan, sekali lagi terima kasih banyak. Pekerjaan yang luar biasa! Beri tahu kami jika Anda pernah dapat mengatasi masalah lebar.

Sepertinya jQuery memiliki beberapa dukungan pemilih semu bawaan, dan sistem kait sehingga plugin dapat menambahkannya sendiri, dan jika tidak menemukannya, ia meneruskannya ke implementasi yang mendasarinya - jadi : diperlukan dan : valid melempar kesalahan di IE (dan mungkin beberapa versi Safari) jika belum di-polyfill. Saya akan melihat apakah saya dapat melakukan jenis pemeriksaan alternatif di sana, daripada menggunakan penyeleksi semu. Sepertinya saya bisa memeriksa attr("wajib") untuk mengganti :required - Saya mungkin harus melakukan semacam pendeteksian fitur untuk :valid - mungkin pemeriksaan untuk properti .oninvalid?

Oke, saya mendapat tambalan baru yang memperbaiki kesalahan IE (dan juga harus memperbaikinya di browser lain). Patch ini mengubah beberapa hal (tidak ada yang harus Anda perhatikan). Berikut catatan saya:

  • cocok dengan gaya pengkodean event handler yang ada dalam versi jquery (bind bukan on, dll.)
  • Saya tidak bisa mendapatkan versi prototipe untuk menyembunyikan elemen pilih ketika divalidasi - sepertinya acara perubahan elemen formulir entah bagaimana ditekan (berfungsi sebaliknya) - Saya pikir ini adalah bug, tetapi bukan yang saya perkenalkan. Perlu diselidiki lebih lanjut.
  • Ada beberapa kebiasaan kecil tentang pemosisian elemen yang tidak valid yang terkadang memerlukan intervensi manual oleh pengguna melalui CSS (hanya masalah jika fitur yang diperlukan digunakan).
  • kotak pilih lebar pendek berakhir dengan bendera yang diperlukan dihaluskan di browser (juga masalah dengan elemen pilih vanilla jika Anda mengatur lebar melalui css). Saya tidak dapat menemukan solusi (beri tahu saya jika Anda melakukannya!) Mungkin gunakan Mozilla, karena itu juga akan terjadi dengan kotak vanilla. Juga, mungkin lihat ekstensi css mereka? https://developer.mozilla.org/en-US/docs/CSS/CSS_Reference/Mozilla_Extensions?redirectlocale=en-US&redirectslug=CSS_Reference%2FMozilla_Extensions (Saya tidak dapat menemukan apa pun dalam sekejap)
  • Saya tidak bisa membuat uglifyjs berfungsi di Windows (jadi build .min.js tidak diperbarui di repo saya) - Saya akan mencoba build dari OSX besok.

@CaptainN Untuk masalah Anda dengan UglifyJS, pastikan Anda menginstal versi 1 karena versi 2 bukan BC. #915 sedang memperbarui paket.json

Bagaimana cara mengganti versi menggunakan npm?

@CaptainN npm install uglify-js@1 untuk memaksa IIRC versi 1 (tapi saya bukan ahli simpul). Solusi lainnya adalah memeriksa cabang saya dan menjalankan npm install dengan file package.json yang diperbarui.

Saya dapat membuat versi uglify di mac kerja saya (mungkin ini memiliki versi uglify-js yang lebih lama?). Mereka sekarang mutakhir di repo saya.

Saya hanya menggunakan rasa jQuery saat ini. Tidak ada kesalahan skrip di IE8/9 lagi. :+1: untuk segera melihat fitur ini di hulu.

Kami juga menghadapi masalah ini. Apakah ada solusi selain menonaktifkan validasi HTML5?
@CaptainN memperbaikinya dari apa yang saya baca. Jadi saya mencoba file selected.jquery.js-nya di cabang master. Tapi itu memberikan kesalahan js dari msie tidak terdefinisi.

Saya pikir saya memperbaikinya. Garpu itu beberapa waktu lalu, dan mungkin perlu diperbarui. Saya akan melihat apakah saya bisa melakukannya minggu ini, dan melihat bug IE.

Saya menyinkronkan hulu ini, dan saya tidak melihat pemberitahuan kesalahan yang tidak ditentukan di IE. Coba repo saya lagi, dan beri tahu saya jika Anda masih melihat masalah ini. (maaf lama sekali)

Terima kasih!

:+1:

Bisakah seseorang meringkas ini untuk saya? Apakah ada garpu atau tambalan di sekitar yang siap diproduksi?

Ada permintaan tarik yang sejalan dengan ini - #900 yang akan menarik garpu adcSTUDIO/Chosen saya.

Alih-alih menyembunyikan kotak pilih asli - ketika pilih diperlukan, dan ketika ada kesalahan, tambalan menempatkan kotak pilih di bawah kotak pilih Terpilih, sehingga pesan kesalahan HTML5 bawaan muncul di lokasi yang benar. Sunting: Saya mungkin harus mencatat bahwa jika kotak tidak ditandai sebagai "wajib" dan tidak pernah dibatalkan, perilaku yang ada dipertahankan.

Permintaan tarik ini tidak menambahkan fungsionalitas tambahan apa pun selain membuat tampilan pemberitahuan kesalahan HTML5 bawaan.

Terima kasih Kevin!

2013/7/29 Kevin Newman [email protected]

Ada permintaan tarik yang sejalan dengan ini - #900 https://github.com/harvethq/chosen/issues/900yang akan menarik garpu adcSTUDIO/Chosen saya.

Alih-alih menyembunyikan kotak pilih asli - saat pilihan diperlukan,
dan ketika ada kesalahan, tambalan menempatkan kotak pilih di bawahnya
kotak pilih Terpilih, sehingga pesan kesalahan HTML5 bawaan muncul di
lokasi yang benar.

Permintaan tarik ini tidak menambahkan fungsionalitas tambahan apa pun di luar
membuat tampilan pemberitahuan kesalahan HTML5 bawaan.


Balas email ini secara langsung atau lihat di Gi tHubhttps://github.com/harvethq/chosen/issues/515#issuecomment -21750086
.

Urs Bräm
Situs web macht

lic. fil. Saya

Theaterplatz 2
3011 Bern
Telp. Buro: +41 31 311 73 61
Telp. Mobil & Combox: +41 76 327 01 51
http://www.ursbraem.ch

Pribadi:
Beundenfeldstr. 50
3013 Bern
P +41 31 301 41 90

Hai,
Saya baru saja mendapatkan versi terbaru (1.0) dan saya masih mengalami masalah ini. Ketika dipilih ditambahkan ke kotak pilih dengan atribut yang diperlukan, di Firefox tip alat "silakan pilih item dari daftar" muncul di sudut kiri atas layar. Di Chrome tidak ada yang terjadi sama sekali. Apakah permintaan tarik tidak terintegrasi dengan versi 1.0? Bagaimana saya bisa mengunduh tambalan itu? Maaf saya tidak lebih akrab dengan Github dan terima kasih sebelumnya!

Saya tidak berpikir perubahan saya digabungkan. Garpu saya mungkin perlu diperbarui juga - sudah lama.

Ah, itu terlalu buruk. Adakah yang tahu apakah itu ada di pipa cabang utama? Adakah saran agar ini berfungsi sementara ini?

Saya tidak tahu apakah mereka berencana untuk mengintegrasikan ini ke dalam master, tetapi yang dapat Anda lakukan adalah menggunakan garpu saya, dan menyinkronkannya ke master, dan itu akan memberi Anda pembaruan hingga saat ini dari repo mereka, dengan perubahan saya diterapkan (dengan asumsi tidak ada konflik) - atau cukup gunakan garpu saya yang agak ketinggalan jaman. Sayangnya, saya tidak akan punya waktu untuk memperbarui garpu saya dalam waktu dekat.

Terima kasih, Kevin.


Yaron Guezo
Kepala Arsitek Perangkat Lunak
MedAdaptics - http://medadaptics.com
(781) 767-7434

Pada Rabu, 27 November 2013 pukul 12:35, Kevin [email protected] menulis :

Ini garpu saya: https://github.com/adcSTUDIO/chosen


Balas email ini secara langsung atau lihat di Gi tHubhttps://github.com/harvethq/chosen/issues/515#issuecomment -29403732
.

@CaptainN Sudahkah Anda membuka PR dengan perubahan Anda? Saya tidak melihat tautan ke PR dalam diskusi ini. Dan jika tidak ada PR untuk meninjaunya, kecil kemungkinan fork Anda akan ditinjau (pengelola meninjau kontribusi yang dikirimkan, yang sudah membutuhkan waktu, sehingga mereka tidak akan mencoba menemukan kontribusi yang belum dikirim)

Ada PR # 900 - agak berantakan - saya mungkin bisa mengubahnya di beberapa titik, dan membersihkannya jika itu akan membantu.

<select diperlukan> dukungan atribut untuk plugin yang dipilih

Halo!
Semuanya sangat, sangat sederhana, dan Anda tidak perlu memiliki waktu 2 tahun untuk membahasnya :)
@CaptainN @yaronguez @stof @kenearley

Untuk menambahkan tampilan yang benar dari pesan kesalahan browser dengan memilih <select required> saat pengguna tidak memilih opsi apa pun,

  1. Hapus pengaturan tampilan: tidak ada untuk memilih tag dari kode plugin JS.
  2. Bungkus tag <select> dalam pembungkus <div> , lalu tambahkan CSS position: relative; untuk <div> ini di CSS Anda.
  3. Tambahkan posisi: mutlak; klip: persegi (0,0,0,0); untuk menyembunyikan tag <select> dalam kode JS plugin.

Jika Anda tidak ingin menghabiskan waktu mengedit kode plugin, cukup tambahkan sesuatu seperti setAttribute ('style', 'display: visible; position: absolute; clip: rect (0,0,0,0)'); setelah menginisialisasi plugin yang dipilih.

Contoh:

 fungsi InitChosen() {
  $('pilih.chzn').setiap(fungsi(indeks) {
  $(ini).dipilih({
  nonaktifkan_search_threshold: 5,
  no_results_text: "Ничего е айдено!"
  });
  this.setAttribute('style','display:visible; position:absolute; clip:rect(0,0,0,0)');
  });
 }

Itu saja. Aaaaaa dan sekarang... DISCO! :)
** Untuk browser yang mendukung atribut "wajib".

Chrome

--2

rubah api

--1

@Aharito Tidakkah kita akan mencapai masalah urutan tab dengan melakukan ini?

Terima kasih @Aharito ini berfungsi dengan baik dengan v1.1.0, ganti saja $('select.chzn') dengan $('.chosen-select') .

Saya pikir saya mencoba klip itu: trik rect, dan menemukan beberapa masalah dengannya. Mungkin dengan browser yang lebih lama? Saya kira jika itu berfungsi sekarang, itu bagus.

Saya pikir mungkin ada masalah tab dengan solusi saya juga (saya tidak ingat, sudah lama) - Saya mengurangi dampaknya dengan hanya menerapkan tambalan ke bidang yang memiliki atribut yang diperlukan.

Kami telah menstandarisasi ini di semua panggilan ke $().chosen()

$.fn.oldChosen = $.fn.chosen
$.fn.chosen = function(options) {
  var select = $(this)
    , is_creating_chosen = !options || _.isObject(options)

  if (is_creating_chosen && select.css('position') === 'absolute') {
    // if we are creating a chosen and the select already has the appropriate styles added
    // we remove those (so that the select hasn't got a crazy width), then create the chosen
    // then we re-add them later
    select.removeAttr('style')
  }

  var ret = select.oldChosen(options)

  if (is_creating_chosen) {
    // https://github.com/harvesthq/chosen/issues/515#issuecomment-33214050
    // only do this if we are initializing chosen (no params, or object params) not calling a method
    select.attr('style','display:visible; position:absolute; clip:rect(0,0,0,0)');
  }
  return ret
}

@ghiculescu Itu tidak menyelesaikan masalah tabbing atau shift-tabbing ke dalam pilih, bukan?

@DASPRiD tidak .

bagaimana dengan ini sebagai solusi penutup yang mungkin.

itu tidak sempurna, tetapi pada kenyataannya, itu menghentikan pemilihan asli agar tidak muncul dengan meneruskan fokus ke kotak dialog yang dipilih berikutnya, tetapi mungkin itu selangkah lebih dekat

"pilih-pilih" hanyalah pemilih untuk pilihan yang saya miliki dengan kelas tertentu, saya tidak yakin apakah "fokus klik" mencakup semua acara masing-masing yang harus saya kaitkan, tetapi mungkin seseorang dapat mengatakan apa lagi yang hilang?

mungkin juga saya salah memahami sesuatu tentang struktur html yang dipilih dan find("a") terlalu liberal, ada yang punya pengalaman lebih?

$(".chosen-select").on("click focus",function(event){
    $(this).next(".chosen-container").find("a").trigger(event.type);
});

oh, dan tentunya " display:visible " seharusnya " display:block " atau apa? sebab v isibility:visible valid, tapi display:visible Saya yakin tidak

apa yang saya temukan adalah bahwa jika Anda memiliki beberapa pilihan di samping satu sama lain dalam wadah yang sama, ini memindahkan semuanya ke lokasi yang salah sehingga position: absolute kemudian membuat pesan validasi muncul di posisi yang salah.

Saya memecahkan ini dengan melepaskan dan memasang kembali ke wadah yang dipilih, seperti

$(".chosen-select").each(function(){
    $(this).next(".chosen-container").prepend($(this).detach());
});

solusi di atas, setelah penyelidikan lebih lanjut, menunjukkan bahwa itu menonaktifkan tabbing melalui bidang sepenuhnya dan saya tidak dapat menyelesaikan masalah, namun itu menghilangkan masalah pilih yang muncul saat Anda melakukan tabbing, jadi itu lebih masalah penting dalam pikiran saya, saya dapat hidup tanpa tab jika saya dapat memilikinya sehingga tidak merusak tampilan, mengingat semakin banyak orang menggunakan perangkat seluler dan tidak melakukan tab, itu hanya memengaruhi pengguna desktop, tetap penting, tetapi relatif berbicara, dikelola.

namun, jika ada yang memecahkannya dengan cara tertentu, saya sangat tertarik untuk mencari tahu.

ok, jadi lebih jauh dari apa yang saya coba sebelumnya, saya menemukan acara yang dipilih menggunakan dan memutuskan bahwa ketika saya melakukan acara apa pun di pilih yang sekarang tersembunyi, saya bisa membajaknya dan memicu acara yang dipilih untuk membukanya.

saya pikir itu bekerja dengan baik.

$(".chosen-select").each(function(){
    //    take each select and put it as a child of the chosen container
    //    this mean it'll position any validation messages correctly
    $(this).next(".chosen-container").prepend($(this).detach());

    //    apply all the styles, personally, I've added this to my stylesheet
    $(this).attr("style","display:block!important; position:absolute; clip:rect(0,0,0,0)");

    //    to all of these events, trigger the chosen to open and receive focus
    $(this).on("click focus keyup",function(event){
        $(this).closest(".chosen-container").trigger("mousedown.chosen");
    });
});

Saya pikir ini adalah versi terbaik yang saya miliki sejauh ini. Untungnya ini memecahkan masalah tab maju, masih ada tab mundur, Anda tidak dapat melakukan tab mundur melalui pilihan yang dipilih karena begitu Anda memasukkan tab ke elemen pilih, Anda segera memfokuskan kembali ke wadah yang dipilih lagi, artinya Anda ' kembali terjebak menjadi hanya mampu tab ke depan.

Mungkin ide untuk melacak elemen sebelumnya dan jika elemen yang sebelumnya memiliki fokus tab berada di depan elemen fokus saat ini, Anda akan mundur, lalu lewati pemfokusan ulang dengan tepat ke yang dipilih dan pilih tab sebelumnya, tetapi saya tidak yakin bagaimana melakukannya.

Setelah membaca sangat lama, saya pikir saya mencoba saran yang diajukan selama bertahun-tahun.

Sayangnya, saya tidak bisa mendapatkan kode dari @christhomas untuk bekerja. Saya memanggilnya dalam fungsi kirim tanpa hasil yang terlihat (tidak ada kesalahan juga).

Kabar baiknya adalah fungsi baru oleh

@DASPRiD @charettes apa maksud Anda tab tidak berfungsi dengan fungsi yang dimodifikasi? Sepertinya berhasil untuk saya

Cukup mudah untuk menambahkan tabindex: -1 ke cuplikan pilih ke @ghiculescu , memecahkan masalah tab.

Contoh: http://jsfiddle.net/hq7b426j/

Saya bisa melihat masalahnya sekarang! Penambahan Anda berfungsi dengan baik @andreialecu

Omong-omong, ada satu tambahan lain yang dibutuhkan. Di iPhone, atau perangkat lain yang tidak didukung, biola tidak akan berfungsi dengan baik. Chosen menonaktifkan dirinya sendiri di iPhone dan membiarkan <select> tidak berubah, dan kode di biola di atas akan menyembunyikannya, tanpa meninggalkan cara untuk berinteraksi dengan yang dipilih.

Biola ini memperbaikinya (dengan menambahkan tampilan: tidak ada centang):
http://jsfiddle.net/hq7b426j/1/

Ah itu lebih baik!! Terima kasih! Saya masih menguji juga, tetapi saya akan memposting jika ada hal lain yang muncul

@CaptainN tolong beri tahu saya bahwa saya memiliki masalah yang sama. wr saya harus memasukkan kode itu. saya menggunakan tema inspina dari wrapbootstrap.

@vidhyaprakash85 Saya tidak yakin apa yang Anda maksud. Saya telah melakukan fork sejak lama, dan menulis permintaan tarik (#900) tetapi repo tidak sinkron sekarang, dan fork saya sangat ketinggalan zaman. Anda dapat menemukannya di sini jika itu membantu: https://github.com/adcSTUDIO/chosen

saya sudah menggunakan https://github.com/harvethq/chosen bagaimana melakukannya :(

@andreialecu kode Anda berfungsi dengan baik! Terima kasih!!!

Terima kasih @christhomas kode Anda bekerja dengan baik :dancer:

Baik @christhomas atau @ghiculescu tidak berfungsi untuk saya menggunakan pilihan multi-grup. meninggalkannya ke validasi server untuk saat ini.

Ketika saya mencoba tambalan @ghiculescu , itu berhasil kecuali gulir ditampilkan sepanjang waktu, di bawah kotak pilih.
Ketika saya mencoba tambalan @christhomas , sembulan muncul tanpa membuka kotak pencarian.

Saya harus memodifikasi skrip @ghiculescu sehingga saya dapat memanggil yang dipilih dua kali seperti itu:

target.find('select')
        .chosen('destroy')
        .chosen({disable_search_threshold: 10})

Jika tidak, perjalanan ke-2 menghapus gaya yang ditambahkan di perjalanan pertama:

$.fn.oldChosen = $.fn.chosen
$.fn.chosen = function(options) {
  var select = $(this)
    , is_creating_chosen = !!options

    var style = 'display:visible; position:absolute; clip:rect(0,0,0,0);'

        if (is_creating_chosen && select.css('position') === 'absolute' && select.attr('style') != style) {
            // if we are creating a chosen and the select already has the appropriate styles added
            // we remove those (so that the select hasn't got a crazy width), then create the chosen
            // then we re-add them later
            select.removeAttr('style')
        }

        var ret = select.oldChosen(options)

        // only act if the select has display: none, otherwise chosen is unsupported (iPhone, etc)
        if (is_creating_chosen && select.css('display') === 'none') {
            // https://github.com/harvesthq/chosen/issues/515#issuecomment-33214050
            // only do this if we are initializing chosen (no params, or object params) not calling a method
            select.attr('style', style);
            select.attr('tabindex', -1);
        }
        return ret
}

Saya baru saja menambahkan kondisi ekstra ini ke 1 jika: && select.attr('style') != style

@doganmeh Berfungsi dengan baik di Chrome dan seluler (dengan Chrome) tetapi diuji di Firefox 53.0 yang tidak berfungsi

Bahkan http://jsfiddle.net/hq7b426j/1/ ini tidak berfungsi di Firefox 53.0

Hmmm, tapi ini sepertinya lebih seperti masalah Firefox karena jika Anda mengklik tombol lebih sering, Anda akan melihat bahwa Firefox mencoba menampilkan pesan (tetapi tidak pernah ditampilkan sepenuhnya)

Saya telah menggunakan solusi ini. Ini sangat sederhana dan berfungsi sempurna:

<style>
    select.submitted:invalid + .chosen-container{
        border-color: red !important;
    }
</style>
$('#yourSelector').chosen({
                no_results_text: "yourText",
                disable_search_threshold: 9,
                search_contains: true
                //your parameters
    }).on('invalid', function(){
        $(this).addClass('submitted');
    });

sepertinya ini tidak berhasil jika Anda memilih dengan banyak pilihan:
http://jsfiddle.net/jeromax/o5a8aogh/

Aku telah memperbaikinya.

`
$.fn.oldChosen = $.fn.chosen
$.fn.chosen = function (opsi) {
var pilih = $(ini),
is_creating_chosen = !!opsi;

if (is_creating_chosen && select.css('position') === 'absolute') {
// jika kita membuat yang dipilih dan yang dipilih sudah memiliki gaya yang sesuai ditambahkan
// kami menghapusnya (sehingga pilihannya tidak memiliki lebar gila), lalu buat yang dipilih
// lalu kita tambahkan lagi nanti
pilih.removeAttr('gaya');
}

var ret = pilih.oldChosen(opsi)

// hanya bertindak jika pilihan memiliki tampilan: tidak ada, jika tidak, pilihan tidak didukung (iPhone, dll)
if (is_creating_chosen && select.css('display') === 'none') {
// https://github.com/harvethq/chosen/issues/515#issuecomment -33214050
// lakukan ini hanya jika kita menginisialisasi yang dipilih (tidak ada params, atau params objek) tidak memanggil metode

  $(this).each(function(index){
      if($(this)[0].multiple==true){
          $(this).attr('style','display:visible; width:0px; height:0px; margin-top:25px; position:absolute; clip:rect(0,0,0,0)');
      }else{
          $(this).attr("style","display:visible; position:absolute; clip:rect(0,0,0,0)");
      }
  })

pilih.attr('tabindex', -2);

}
kembali ret
}
`

+1

Adakah yang bisa melakukan perbaikan untuk ini? Ini masalah yang cukup lama dan fungsionalitas yang sangat penting saat ini. Terima kasih.

Tidak bekerja pada versi terbaru.

Ini tampaknya melanggar validasi formulir angular.js saat menggunakan pilihan sudut juga.

Ini tahun 2018 dan kami masih memiliki masalah yang sama. Sangat disayangkan bagaimana standar HTML tidak dapat bekerja dengan baik dan terintegrasi dengan plugin eksternal. Gila kali :)

Ini juga melanggar plugin pilihan Drupal. Lihat https://www.drupal.org/project/chosen/issues/2705891

Tidak dapat menemukan solusi yang tepat untuk ini selain solusi:

<div class="form__select">
  <select class="chosen">
    <!-- options -->
  </select>
</div>
.form__select {
    position: relative;
}

.form__select .chosen {
    display: block !important;
    height: 0;

    position: absolute;
    left: 35px;
    bottom: 0;

    outline: none;
    border-color: white;

    pointer-events: none;
}

Jika Anda menggunakan Terpilih untuk semua elemen select , Anda dapat menggunakan CSS ini untuk mengubah membuatnya terlihat (ke DOM), tetapi tanpa opacity, tanpa ketinggian, posisi absolut.

Pemilih CSS ini menargetkan elemen pilihan yang tidak valid, dengan salah satunya menargetkan multiple menambahkan 15px margin-top untuk memusatkannya pada elemen pilihan ganda.

select:invalid {
    height: 0px !important;
    opacity: 0 !important;
    position: absolute !important;
    display: flex !important;
}

select:invalid[multiple] {
   margin-top: 15px !important;
}

Demo: http://jsfiddle.net/tripflex/2zdeu9oc/

TAPI BENAR-BENAR ... ini seharusnya sudah ditangani oleh lib Terpilih.JS

Inilah solusi saya, jika ada gunanya:

// Initialise Chosen
$(function () {
    $('select').chosen();
});

// Place the original input behind the Chosen input, matching the height and width so that the warning appears in the correct position
$('select').on('chosen:ready', function () {
    const height = $(this).next('.chosen-container').height();
    const width = $(this).next('.chosen-container').width();

    $(this).css({
            'position': 'absolute',
            'height': height,
            'width': width,
            'opacity': 0
        })
        .show();
});

@jonathanbull dapatkah Anda menunjukkannya dalam konteks? Saya mencoba solusi Anda dan tidak berhasil.

@AndrewSouthpaw Ini kode saya, perbaikan berfungsi dengan baik untuk saya :)

$("#select").val([]); // disable default selection by browser
$('#select').on('chosen:ready', function(evt, params, chosen) {
    $(this).css({'position': 'absolute', 'height': 0, 'opacity': 0}).show();
});
$("#select").chosen();

Saya menggunakan kode yang sedikit berbeda (berdasarkan kode di sini):

$('.chosen-select').on("chosen:ready", function (evt, data) {
  $(this)
    .addClass('chosen_hidden')
    .attr('tabindex', '-1')
    .prependTo(data.chosen.container)
    .show()
  })
  .chosen({width: '100%'})
.chosen_hidden {
  position: absolute;
  top: 0;
  bottom: 0;
  max-height: 100%; // required for IE 10
  // **not required** opacity: 0;
}

Itu tidak menangani tindakan 'hancurkan', tetapi memposisikan pesan kesalahan dengan baik dan tampaknya berfungsi di Firefox dan Chromiun. Karena pemilih asli tidak disembunyikan, batas sorotan kesalahan terlihat. Pembaruan : dengan max-height ini juga berfungsi di IE. Pembaruan lainnya : tambahkan tabindex -1 untuk memastikannya tidak menerima fokus. (sambil tetap fokus dan menerima pesan kesalahan).

Ada PR terbuka yang menyelesaikan ini, tapi saya pikir itu hilang karena utas lain yang ditargetkan ditutup. Lihat #2594

@jhedstrom akan senang melihat itu digabungkan. Tahukah Anda jika perpustakaan ini masih terawat?

Saya menggunakan sesuatu yang mirip dengan solusi @eloyesp di atas dan membagikannya di sini:

https://github.com/harvethq/chosen/pull/2594#issuecomment -714806139

Terima kasih @jhedstrom karena telah mengarahkan saya ke arah yang benar!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

scottdoc picture scottdoc  ·  7Komentar

SFPink picture SFPink  ·  4Komentar

Scalamoosh picture Scalamoosh  ·  8Komentar

Jeckerson picture Jeckerson  ·  7Komentar

blankhang picture blankhang  ·  7Komentar
bleepcoder.com menggunakan informasi GitHub berlisensi publik untuk menyediakan solusi bagi pengembang di seluruh dunia untuk masalah mereka. Kami tidak berafiliasi dengan GitHub, Inc. atau dengan pengembang mana pun yang menggunakan GitHub untuk proyek mereka. Kami tidak meng-host video atau gambar apa pun di server kami. Semua hak milik masing-masing pemiliknya.
Sumber untuk halaman ini: Sumber

Bahasa pemrograman populer
Lebih banyak proyek GitHub

© 2024 bleepcoder.com - Contact
Made with in the Dominican Republic.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.