Adakah ide bagaimana agar DatePicker muncul di akhir kotak teks terkait alih-alih langsung di bawahnya? Apa yang cenderung terjadi adalah bahwa kotak teks berada di bagian bawah halaman dan DatePicker bergeser untuk memperhitungkannya dan menutupi kotak teks sepenuhnya. Jika pengguna ingin mengetik tanggal alih-alih memilihnya, mereka tidak bisa. Saya lebih suka menampilkannya tepat setelah kotak teks jadi tidak masalah bagaimana itu menyesuaikan secara vertikal.
Ada ide bagaimana mengontrol pemosisian? Saya tidak melihat pengaturan apa pun untuk widget, dan saya belum beruntung mengubah pengaturan CSS, tetapi saya dapat dengan mudah melewatkan sesuatu.
javascript
jquery
jquery-ui
jquery-ui-datepicker
gfrizzle
sumber
sumber
Jawaban:
Jawaban yang diterima untuk pertanyaan ini sebenarnya bukan untuk jQuery UI Datepicker. Untuk mengubah posisi jQuery UI Datepicker cukup modifikasi .ui-datepicker di file css. Ukuran Datepicker juga dapat diubah dengan cara ini, cukup sesuaikan ukuran font.
sumber
Inilah yang saya gunakan:
Anda mungkin juga ingin menambahkan sedikit lebih banyak ke margin kiri sehingga tidak tepat terhadap bidang input.
sumber
$(this).position(my:'left top', at:'left bottom', of:'#altField')
(karena saya menggunakanaltField
opsi datepicker untuk tampilan)Saya melakukannya langsung di CSS:
Semua bidang masukan tanggal saya lebarnya 100 piksel. Saya juga menambahkan z-index sehingga kalender juga muncul di atas popup AJAX.
Saya tidak mengubah file CSS jquery-ui; Saya membebani kelas di file CSS utama saya, jadi saya dapat mengubah tema atau memperbarui widget tanpa harus memasukkan kembali mod spesifik saya.
sumber
Berikut adalah variasi penyelarasan kalender Datepicker saya.
Saya pikir itu cukup bagus, karena Anda dapat mengontrol pemosisian melalui jQuery UI Position util.
Satu batasan: jquery.ui.position.js diperlukan.
Kode:
sumber
afterShow
metode.Berikut adalah variasi lain yang bekerja dengan baik untuk saya, sesuaikan rect.top + 40, rect.left + 0 agar sesuai dengan kebutuhan Anda:
sumber
Ini bekerja untuk saya:
sumber
Pertama saya pikir harus ada
afterShowing
metode di objek datepicker, di mana Anda dapat mengubah posisi setelah jquery melakukan semua voodoo dalam_showDatepicker
metode tersebut. Selain itu, parameter yang dipanggilpreferedPosition
juga diinginkan, sehingga Anda dapat menyetelnya dan jquery memodifikasinya jika dialog ditampilkan di luar viewport.Ada "trik" untuk melakukan hal terakhir ini. Jika Anda mempelajari
_showDatepicker
metode ini, Anda akan melihat penggunaan variabel privat$.datepikcer._pos
. Variabel itu akan diatur jika tidak ada yang mengaturnya sebelumnya. Jika Anda memodifikasi variabel itu sebelum menampilkan dialog, Jquery akan mengambilnya dan akan mencoba untuk mengalokasikan dialog di posisi itu, dan jika itu merender keluar dari layar, itu akan menyesuaikannya untuk memastikan itu terlihat. Kedengarannya bagus, ya?Masalahnya adalah;
_pos
bersifat pribadi, tetapi jika Anda tidak keberatan. Kamu bisa:Tapi hati-hati dengan update Jquery-ui, karena perubahan dalam implementasi internal
_showDatepicker
dapat merusak kode Anda.sumber
Saya perlu memposisikan datepicker menurut div induk di mana kontrol input tanpa batas saya berada. Untuk melakukannya, saya menggunakan utilitas "posisi" yang termasuk dalam inti UI jquery. Saya melakukan ini di acara beforeShow. Seperti yang dikomentari orang lain di atas, Anda tidak dapat mengatur posisi secara langsung di beforeShow, karena kode pemilih data akan mengatur ulang lokasi setelah menyelesaikan fungsi beforeShow. Untuk menyiasatinya, cukup atur posisinya menggunakan setInterval. Skrip saat ini akan selesai, menampilkan datepicker, dan kemudian kode reposisi akan berjalan segera setelah datepicker terlihat. Meskipun itu seharusnya tidak pernah terjadi, jika datepicker tidak terlihat setelah 0,5 detik, kode tersebut memiliki fail-safe untuk menyerah dan menghapus interval.
sumber
mengikat focusin setelah menggunakan css perubahan datepicker dari widget datepicker`s ingin bantuan
sumber
saya memperbaikinya dengan kode jquery kustom saya.
memberi saya input field datepicker kelas " .datepicker2 "
temukan posisinya saat ini dari atas dan
menempatkan kotak popup, yang nama kelasnya adalah " .ui-datepicker "
ini kode saya.
di sini "40" adalah piksel yang saya harapkan, Anda dapat mengubahnya dengan piksel Anda.
sumber
memperbaiki masalah tampilkan posisi daterangepicker.jQuery.js
sumber
Fungsi jquery yang sangat sederhana.
sumber
Saya menghabiskan banyak waktu untuk mencoba mencari tahu masalah ini untuk beberapa halaman situs baru yang saya kembangkan dan sepertinya tidak ada yang berhasil (termasuk salah satu dari berbagai solusi yang disajikan di atas yang saya terapkan. Saya menduga jQuery baru saja berubah semuanya cukup karena mereka disarankan bahwa solusi tidak berfungsi lagi. Saya tidak tahu. Sejujurnya, saya tidak mengerti mengapa tidak ada sesuatu yang sederhana yang diimplementasikan ke dalam jQuery ui untuk mengonfigurasi ini, karena tampaknya masalah yang cukup besar dengan kalender selalu muncul di beberapa posisi jauh di bawah halaman dari masukan yang dilampirkan.
Bagaimanapun, saya menginginkan solusi akhir yang cukup umum sehingga saya dapat menggunakannya di mana saja dan itu akan berhasil. Sepertinya saya akhirnya sampai pada kesimpulan yang menghindari beberapa jawaban yang lebih rumit dan spesifik kode jQuery di atas:
jsFiddle: http://jsfiddle.net/mu27tLen/
HTML:
JS:
Pada dasarnya saya melampirkan tag gaya baru ke kepala sebelum setiap acara "show" datepicker (menghapus yang sebelumnya, jika ada). Metode melakukan sesuatu ini mengatasi sebagian besar masalah yang saya hadapi selama pengembangan.
Diuji di Chrome, Firefox, Safari, dan IE> 8 (karena IE8 tidak bekerja dengan baik dengan jsFiddle dan saya kehilangan semangat untuk memperhatikan
Saya tahu bahwa ini adalah campuran konteks jQuery dan javascript, tetapi pada titik ini saya hanya tidak ingin berusaha mengubahnya menjadi jQuery. Akan sederhana, saya tahu. Aku sudah selesai dengan hal ini sekarang. Semoga orang lain bisa mendapatkan manfaat dari solusi ini.
sumber
Mereka mengubah nama kelas menjadi
ui-datepicker-trigger
Jadi ini berhasil
jquery 1.11.x
sumber
Saya mengambilnya dari (( Cara mengontrol pemosisian jQueryUI datepicker ))
$ .extend ($. datepicker, {_checkOffset: function (inst, offset, isFixed) {return offset}});
berhasil !!!
sumber
Atau Anda dapat menggunakan acara fokus pada objek dateSelect Anda dan api posisi bersama-sama. Anda dapat menukar atas dan bawah dan kiri ke kanan atau tengah (atau apa pun yang Anda inginkan dari api posisi). Dengan cara ini Anda tidak memerlukan interval atau solusi yang sangat rumit dan Anda dapat mengonfigurasi tata letak agar sesuai dengan kebutuhan Anda tergantung di mana masukannya.
sumber
Perlu juga dicatat bahwa jika IE masuk ke mode quirks, komponen jQuery UI Anda, dan elemen lainnya, akan ditempatkan secara tidak benar.
Untuk memastikan Anda tidak masuk ke mode quirks, pastikan Anda menyetel doctype dengan benar ke HTML5 terbaru.
Menggunakan transisi membuat banyak hal menjadi berantakan. Semoga ini akan menghemat waktu seseorang di masa depan.
sumber
Ini menempatkan fungsionalitas ke dalam metode bernama fungsi, memungkinkan kode Anda untuk merangkumnya atau metode yang akan dibuat ekstensi jquery. Baru saja digunakan pada kode saya, berfungsi dengan sempurna
sumber
Di dalam Jquery.UI, perbarui saja fungsi _checkOffset, sehingga viewHeight ditambahkan ke offset.top, sebelum offset dikembalikan.
sumber
sumber
sumber