Saya memiliki kotak dialog UI jQuery dengan formulir. Saya ingin mensimulasikan klik pada salah satu tombol dialog sehingga Anda tidak perlu menggunakan mouse atau tab untuk itu. Dengan kata lain, saya ingin itu berfungsi seperti kotak dialog GUI biasa di mana mensimulasikan menekan tombol "OK".
Saya menganggap ini mungkin opsi sederhana dengan dialog, tetapi saya tidak dapat menemukannya di dokumentasi jQuery UI . Saya bisa mengikat setiap input formulir dengan keyup () tetapi tidak tahu apakah ada cara yang lebih sederhana / bersih. Terima kasih.
Jawaban:
Saya tidak tahu apakah ada opsi di widget jQuery UI , tetapi Anda bisa mengikat
keypress
acara ke div yang berisi dialog Anda ...Ini akan berjalan tidak peduli elemen apa yang memiliki fokus dalam dialog Anda, yang mungkin atau mungkin bukan hal yang baik tergantung pada apa yang Anda inginkan.
Jika Anda ingin menjadikan ini fungsionalitas default, Anda dapat menambahkan potongan kode ini:
Berikut tampilan yang lebih terperinci tentang tampilannya:
sumber
Saya telah merangkum jawaban di atas & menambahkan hal-hal penting
Keuntungan:
textarea
,select
,button
atau input dengan tombol jenis, bayangkan mengklik pengguna masuk padatextarea
dan mendapatkan formulir yang diajukan bukannya baris baru!$(document).ready
document
dan tidak akan mengikat penangan ke setiap dialog seperti dalam beberapa kode di atas, untuk efisiensi lebih$('<div><input type="text"/></div>').dialog({buttons: .});
:first
Kekurangan:
eq()
atau memanggil fungsi di dalam pernyataan if'.ui-dialog'
Saya tahu pertanyaannya sudah lama tetapi saya memiliki kebutuhan yang sama, jadi, saya membagikan solusi yang saya gunakan.
sumber
.delegate()
sudah tidak digunakan lagi di jQuery 3.0, jadi.on()
(tersedia sejak 1.7) mungkin merupakan rute untuk pergi pada titik ini.Ini berfungsi dengan baik dengan versi terbaru JQuery UI (1.8.1). Anda juga dapat menggunakan: pertama alih-alih: terakhir tergantung pada tombol mana yang ingin Anda tetapkan sebagai default.
Solusi ini, dibandingkan dengan yang dipilih di atas, memiliki keuntungan menunjukkan tombol mana yang merupakan default untuk pengguna. Pengguna juga dapat TAB antara tombol dan menekan ENTER akan mengklik tombol yang saat ini dalam fokus.
Bersulang.
sumber
Cara kasar tetapi efektif untuk membuat ini bekerja lebih umum:
Kemudian ketika Anda membuat dialog baru Anda bisa melakukan ini:
Dan gunakan seperti dialog jquery normal setelahnya:
Ada cara untuk meningkatkannya agar berfungsi dalam kasus yang lebih khusus. Dengan kode di atas, ia akan secara otomatis memilih tombol pertama dalam dialog sebagai tombol untuk memicu ketika masuk ditekan. Juga diasumsikan bahwa hanya ada satu dialog aktif pada waktu tertentu yang mungkin tidak terjadi. Tetapi Anda mendapatkan idenya.
Catatan: Seperti disebutkan di atas, tombol yang ditekan saat masuk tergantung pada pengaturan Anda. Jadi, dalam beberapa kasus Anda ingin menggunakan: pemilih pertama dalam metode .find dan dalam kasus lain Anda mungkin ingin menggunakan: pemilih terakhir.
sumber
Daripada mendengarkan kode-kode kunci seperti dalam jawaban ini (yang saya tidak bisa mulai bekerja) Anda dapat mengikat untuk mengirimkan acara formulir dalam dialog dan kemudian lakukan ini:
Jadi, semuanya akan terlihat seperti ini
Perhatikan bahwa browser yang berbeda menangani tombol enter secara berbeda, dan beberapa tidak selalu melakukan pengiriman saat masuk.
sumber
Ben Clayton adalah yang paling rapi dan terpendek dan dapat ditempatkan di bagian atas halaman indeks Anda sebelum dialog jquery dimulai. Namun, saya ingin menunjukkan bahwa ".Live" telah usang. Tindakan yang disukai sekarang ".on". Jika Anda ingin ".on" berfungsi seperti ".live", Anda harus menggunakan acara yang didelegasikan untuk melampirkan pengendali acara. Juga, beberapa hal lain ...
Saya lebih suka menggunakan metode ui.keycode.ENTER untuk menguji kunci enter karena Anda tidak harus mengingat kode kunci yang sebenarnya.
Menggunakan "$ ('. Ui-dialog-buttonpane tombol: first', $ (this))" untuk pemilih klik membuat keseluruhan metode menjadi generik.
Anda ingin menambahkan "return false;" untuk mencegah default dan menghentikan propagasi.
Pada kasus ini...
sumber
Saya tidak tahu tentang yang lebih sederhana, tetapi biasanya Anda akan melacak tombol mana yang memiliki fokus saat ini. Jika fokus diubah ke kontrol yang berbeda, maka "tombol fokus" akan tetap pada tombol yang terakhir fokus. Biasanya, "tombol fokus" akan mulai pada tombol default Anda. Menabrak tombol yang berbeda akan mengubah "fokus tombol". Anda harus memutuskan apakah menavigasi ke elemen formulir yang berbeda akan mengatur ulang "fokus tombol" ke tombol default lagi. Anda juga mungkin memerlukan beberapa indikator visual selain peramban bawaan untuk menunjukkan tombol fokus karena kehilangan fokus nyata di jendela.
Setelah Anda memiliki logika tombol fokus dan diimplementasikan, maka saya mungkin akan menambahkan penangan kunci untuk dialog itu sendiri dan meminta tindakan yang terkait dengan tombol "fokus" saat ini.
EDIT : Saya membuat asumsi bahwa Anda ingin dapat menekan enter kapan saja Anda mengisi elemen formulir dan memiliki tindakan tombol "saat ini" diutamakan. Jika Anda hanya menginginkan perilaku ini ketika tombol benar-benar fokus, jawaban saya terlalu rumit.
sumber
Saya menemukan solusi ini, ini berfungsi pada IE8, Chrome 23.0 dan Firefox 16.0
Ini berdasarkan komentar Robert Schmidt.
Saya harap ini membantu siapa pun.
sumber
Terkadang kita lupa dasar dari apa yang sudah didukung browser:
Ini akan menyebabkan ENTERkunci untuk mengirimkan formulir.
sumber
Saya melakukan cara seperti itu ...;) Semoga ini bisa membantu seseorang ..
sumber
Ini seharusnya berfungsi untuk memicu klik pada handler klik tombol. contoh ini mengasumsikan Anda telah menyiapkan formulir dalam dialog untuk menggunakan plugin jquery.validate. tetapi bisa dengan mudah diadaptasi.
sumber
Saya menyadari sudah ada banyak jawaban, tetapi saya rasa secara alami bahwa solusi saya adalah yang paling rapi, dan mungkin yang terpendek. Ini memiliki keuntungan bahwa ia bekerja pada dialog apa pun yang dibuat kapan saja di masa depan.
sumber
Inilah yang saya lakukan:
Dalam hal ini, myForm adalah objek jQuery yang berisi html formulir (perhatikan, tidak ada tag "formulir" di sana ... jika Anda meletakkannya di seluruh layar akan menyegarkan saat Anda menekan "enter").
Setiap kali pengguna menekan "masuk" dari dalam formulir itu akan sama dengan mengklik tombol "ok".
Ini juga menghindari masalah memiliki formulir terbuka dengan tombol "ok" sudah disorot. Meskipun itu bagus untuk formulir tanpa bidang, jika Anda membutuhkan pengguna untuk mengisi barang, maka Anda mungkin ingin bidang pertama disorot.
sumber
dilakukan dan dilakukan
sumber
jika Anda tahu pemilih elemen tombol:
Sebaiknya lakukan trik untuk Anda. Ini akan memfokuskan tombol ok, dan masuk akan 'mengklik' itu, seperti yang Anda harapkan. Ini adalah teknik yang sama yang digunakan dalam dialog UI asli.
sumber
sumber
Saya menemukan solusi yang cukup sederhana untuk masalah ini:
sumber
Ini bekerja sangat baik untuk saya ..
sumber
Tidak satu pun dari solusi ini yang bekerja untuk saya di IE9. Saya berakhir dengan ini ..
sumber
Di bawah tubuh digunakan karena dialog DIV ditambahkan pada tubuh, jadi tubuh sekarang mendengarkan acara keyboard. Ini diuji pada IE8,9,10, Mojila, Chrome.
sumber
Karena saya tidak punya cukup reputasi untuk mengirim komentar.
Jawaban yang dimodifikasi oleh Basemm # 35 juga ditambahkan di Escape untuk menutup dialog.
sumber
Ini bekerja dengan baik Terima kasih !!!
open: function () { debugger; $("#dialogDiv").keypress(function (e) { if (e.keyCode == 13) { $(this).parent().find("#btnLoginSubmit").trigger("click"); } }); },
sumber
Berikan kelas tombol Anda dan pilih dengan cara biasa:
sumber