if ($("#makespan").is(":visible") == true) {
var make = $("#make").val();
}
else {
var make = $("#othermake").val();
}
Make:<span id=makespan><select id=make></select><span id=othermakebutton class=txtbutton>Other?</span></span><span id=othermakespan style="display: none;"><input type=text name=othermake id=othermake> - <span id=othermakecancel class=txtbutton>Cancel</span></span>
Kode di atas berjalan mulus di Firefox, tetapi sepertinya tidak berfungsi di Chrome. Di Chrome itu menunjukkan .is(":visible") = false
bahkan ketika itu true
.
Saya menggunakan versi jQuery berikut: jquery-1.4.3.min.js
jsFiddle Link: http://jsfiddle.net/WJU2r/4/
jquery
google-chrome
Saad Bashir
sumber
sumber
Jawaban:
Tampaknya
:visible
pemilih jQuery tidak berfungsi untuk beberapa elemen sebaris di Chrome. Solusinya adalah menambahkan gaya tampilan, suka"block"
atau"inline-block"
untuk membuatnya berfungsi.Perhatikan juga bahwa jQuery memiliki definisi yang agak berbeda tentang apa yang terlihat daripada banyak pengembang:
Dengan kata lain, suatu elemen harus memiliki lebar dan tinggi yang tidak nol untuk mengkonsumsi ruang dan terlihat.
Di sisi lain, bahkan jika
visibility
itu diatur kehidden
atau opacity adalah nol, itu masih:visible
ke jQuery karena mengkonsumsi ruang, yang dapat membingungkan ketika CSS secara eksplisit mengatakan visibilitasnya disembunyikan.Cara mudah untuk melihatnya, adalah bahwa jika Anda dapat melihat elemen di layar, bahkan jika Anda tidak dapat melihat kontennya, itu transparan dll., Itu terlihat, yaitu itu memakan ruang.
Saya membersihkan sedikit markup Anda dan menambahkan gaya tampilan ( yaitu mengatur tampilan elemen ke "blok" dll ), dan ini berfungsi untuk saya:
BIOLA
Referensi API resmi untuk
:visible
Pada jQuery 3, definisi
:visible
telah sedikit berubahsumber
Saya tidak tahu mengapa kode Anda tidak berfungsi pada chrome, tetapi saya sarankan Anda menggunakan beberapa solusi:
atau
Jika Anda yakin bahwa jQuery memberi Anda beberapa hasil buruk di chrome, Anda bisa mengandalkan pemeriksaan aturan css:
Plus, Anda mungkin ingin menggunakan jQuery terbaru karena mungkin ada bug dari versi yang lebih lama diperbaiki.
sumber
:hidden
dan:not(:visible)
. stackoverflow.com/questions/17425543/…Ada kasus aneh di mana jika elemen diatur ke
display: inline
pemeriksaan jQuery untuk visibilitas gagal.Contoh:
CSS
jQuery
Untuk memperbaikinya Anda dapat menyembunyikan elemen di jQuery dan daripada
show/hide
atautoggle()
seharusnya berfungsi dengan baik.sumber
Saya menganggap itu ada hubungannya dengan kekhasan dalam HTML kami karena tempat lain pada halaman yang sama berfungsi dengan baik.
Satu-satunya cara saya dapat menyelesaikan masalah ini adalah dengan melakukan:
sumber
Jika Anda membaca dokumen jquery, ada banyak alasan untuk sesuatu yang tidak dianggap terlihat / disembunyikan:
Mereka tidak memiliki nilai tampilan CSS.
Mereka adalah elemen bentuk dengan tipe = "tersembunyi".
Lebar dan tinggi mereka secara eksplisit diatur ke 0.
Elemen leluhur disembunyikan, sehingga elemen tidak ditampilkan di halaman.
http://api.jquery.com/visible-selector/
Berikut adalah contoh jsfiddle kecil dengan satu elemen terlihat dan satu tersembunyi:
http://jsfiddle.net/tNjLb/
sumber
Internet Explorer, Chrome, Firefox ...
Fungsi Lintas Peramban "isVisible ()"
Contoh lengkap:
Salam,
Fernando
sumber
Secara umum saya menjalani situasi ini ketika orang tua dari objek saya disembunyikan. misalnya ketika html seperti ini:
jika Anda bertanya apakah anak terlihat seperti:
itu akan mengembalikan false karena induknya tidak terlihat sehingga div tidak akan terlihat juga.
sumber
Solusi lintas browser / versi untuk menentukan apakah suatu elemen terlihat, adalah dengan menambahkan / menghapus kelas css ke elemen pada acara / sembunyikan. Keadaan default (terlihat) elemen dapat misalnya seperti ini:
<span id="span1" class="visible">Span text</span>
Kemudian pada hide, hapus kelas:
$("#span1").removeClass("visible").hide();
Pada acara, tambahkan lagi:
$("#span1").addClass("visible").show();
Kemudian untuk menentukan apakah elemen tersebut terlihat, gunakan ini:
if ($("#span1").hasClass("visible")) { // do something }
Ini juga memecahkan implikasi kinerja, yang mungkin terjadi pada penggunaan pemilih ": terlihat" yang berat, yang ditunjukkan dalam dokumentasi jQuery:
Dokumentasi API jQuery resmi untuk pemilih ": terlihat"
sumber
Saya menambahkan style berikutnya pada parent dan .is (": visible") berfungsi.
sumber
Jika suatu item adalah anak dari item yang disembunyikan adalah (": terlihat") akan mengembalikan true, yang tidak benar.
Saya baru saja memperbaiki ini dengan menambahkan "display: inherit" ke item anak. Ini akan memperbaikinya untuk saya:
dan CSS:
Sekarang item dapat dinyalakan dan dimatikan secara efektif dengan mengubah visibilitas induk, dan $ (elemen) .is (": terlihat") akan mengembalikan visibilitas item induk
sumber
Ini adalah potongan kode dari jquery.js yang dieksekusi ketika is (": visible") dipanggil:
Seperti yang Anda lihat, ia menggunakan lebih dari sekedar properti tampilan CSS. Ini juga tergantung pada lebar dan tinggi konten elemen. Karenanya, pastikan elemen memiliki lebar dan tinggi. Dan untuk melakukan ini, Anda mungkin perlu mengatur properti tampilan ke
"inline-block"
atau"block"
sumber
Saya perlu menggunakan visibility: hidden insted display: none karena visibilitas mengambil peristiwa, sementara layar tidak.
Jadi saya lakukan
.attr('visibility') === "visible"
sumber