У меня есть диалоговое окно пользовательского интерфейса jQuery с формой. Я хотел бы смоделировать щелчок по одной из кнопок диалогового окна, чтобы вам не приходилось использовать мышь или вкладку для нее. Другими словами, я хочу, чтобы оно действовало как обычное диалоговое окно графического интерфейса пользователя, имитирующее нажатие кнопки «ОК».
Я предполагаю, что это может быть простой вариант с диалоговым окном, но я не могу найти его в документации jQuery UI . Я мог связать каждый ввод формы с помощью keyup (), но не знал, есть ли более простой / чистый способ. Спасибо.
Ответы:
Я не знаю, есть ли опция в виджете jQuery UI , но вы можете просто привязать
keypress
событие к div, который содержит ваш диалог ...Это будет работать независимо от того, какой элемент находится в фокусе вашего диалога, что может быть или не быть хорошим, в зависимости от того, что вы хотите.
Если вы хотите сделать это функцией по умолчанию, вы можете добавить этот фрагмент кода:
Вот более подробное изображение того, как это будет выглядеть:
источник
Я суммировал ответы выше и добавил важные вещи
Преимущества:
textarea
,select
,button
или входы с кнопкой типа, представьте пользователь , нажав войти наtextarea
и получить форму , представленную вместо получения новой строки!$(document).ready
document
и не будет связывать обработчик с каждым диалогом, как в некотором коде выше, для большей эффективности.$('<div><input type="text"/></div>').dialog({buttons: .});
:first
Недостатки:
eq()
или вызвать функцию внутри оператора if'.ui-dialog'
Я знаю, что вопрос старый, но у меня была такая же потребность, поэтому я поделился решением, которое использовал.
источник
.delegate()
он устарел в jQuery 3.0, поэтому.on()
(доступен с версии 1.7), вероятно, это путь, по которому следует идти на этом этапе.Он прекрасно работает с последней версией JQuery UI (1.8.1). Вы также можете использовать: first вместо: last в зависимости от того, какую кнопку вы хотите установить по умолчанию.
Это решение, по сравнению с выбранным выше, имеет то преимущество, что показывает, какая кнопка является кнопкой по умолчанию для пользователя. Пользователь также может переключаться между кнопками TAB, а нажатие ENTER щелкает по кнопке, которая в данный момент находится в фокусе.
Приветствия.
источник
Грубый, но эффективный способ сделать эту работу более общей:
Затем, когда вы создаете новый диалог, вы можете сделать это:
И после этого используйте его как обычный диалог jquery:
Есть способы улучшить это, чтобы заставить его работать в более особых случаях. С помощью приведенного выше кода он автоматически выберет первую кнопку в диалоговом окне в качестве кнопки, запускаемой при нажатии клавиши ввода. Также предполагается, что в любой момент времени существует только один активный диалог, что может быть не так. Но Вы получаете идею.
Примечание. Как упоминалось выше, кнопка, которая нажимается при вводе, зависит от ваших настроек. Итак, в некоторых случаях вы захотите использовать селектор: first в методе .find, а в других вы можете захотеть использовать селектор: last.
источник
Вместо того, чтобы слушать коды клавиш, как в этом ответе (который я не смог заставить работать), вы можете привязать к событию отправки формы в диалоговом окне, а затем сделать следующее:
Итак, все это будет выглядеть так
Обратите внимание, что разные браузеры обрабатывают ключ ввода по-разному, а некоторые не всегда отправляют при входе.
источник
Ben Clayton's - самый изящный и самый короткий, и его можно разместить вверху вашей индексной страницы до того, как будут инициализированы какие-либо диалоги jquery. Однако я хотел бы отметить, что ".live" устарел. Теперь предпочтительное действие - ".on". Если вы хотите, чтобы .on функционировал как .live, вам нужно будет использовать делегированные события для присоединения обработчика событий. И еще кое-что ...
Я предпочитаю использовать метод ui.keycode.ENTER для проверки клавиши ввода, поскольку вам не нужно запоминать фактический код клавиши.
Использование "$ ('. Ui-dialog-buttonpane button: first', $ (this))" для селектора кликов делает весь метод универсальным.
Вы хотите добавить "return false;" чтобы предотвратить дефолт и остановить распространение.
В таком случае...
источник
Не знаю, как проще, но обычно вы отслеживаете, какая кнопка имеет текущий фокус. Если фокус изменен на другой элемент управления, то «фокус кнопки» останется на кнопке, которая имела фокус последней. Обычно «фокус кнопки» начинается с кнопки по умолчанию. Переход к другой кнопке изменит «фокус кнопки». Вам нужно будет решить, приведет ли переход к другому элементу формы к сбросу «фокуса кнопки» снова на кнопку по умолчанию. Вам также, вероятно, понадобится какой-то визуальный индикатор, отличный от стандартного в браузере, чтобы указать кнопку с фокусом, поскольку она теряет реальный фокус в окне.
После того, как вы определили и реализовали логику фокуса кнопки, я бы, вероятно, добавил ключевой обработчик к самому диалогу и заставил бы его вызывать действие, связанное с текущей «сфокусированной» кнопкой.
РЕДАКТИРОВАТЬ : Я предполагаю, что вы хотите иметь возможность нажимать Enter в любое время, когда вы заполняете элементы формы, и чтобы «текущее» действие кнопки имело приоритет. Если вам нужно только такое поведение, когда кнопка фактически сфокусирована, мой ответ слишком сложен.
источник
Я нашел это решение, оно работает в IE8, Chrome 23.0 и Firefox 16.0
Это основано на комментарии Роберта Шмидта.
Надеюсь, это кому-нибудь поможет.
источник
Иногда мы забываем основы того, что браузер уже поддерживает:
Это приведет к тому, что ENTERключ отправит форму.
источник
Я так и поступил ...;) Надеюсь, это кому-то поможет ..
источник
Это должно сработать, чтобы вызвать щелчок обработчика нажатия кнопки. в этом примере предполагается, что вы уже настроили форму в диалоговом окне для использования плагина jquery.validate. но может быть легко адаптирован.
источник
Я понимаю, что ответов уже много, но я, естественно, считаю, что мое решение является самым точным и, возможно, самым коротким. Его преимущество состоит в том, что он работает с любыми диалогами, созданными в любое время в будущем.
источник
Вот что я сделал:
В этом случае myForm - это объект jQuery, содержащий html формы (обратите внимание, там нет никаких тегов «формы» ... если вы поместите их на весь экран, они обновятся, когда вы нажмете «ввод»).
Всякий раз, когда пользователь нажимает «ввод» в форме, это будет эквивалентно нажатию кнопки «ОК».
Это также позволяет избежать проблемы с открытием формы с уже выделенной кнопкой «ОК». Хотя это было бы хорошо для форм без полей, если вам нужно, чтобы пользователь заполнял данные, вы, вероятно, хотите, чтобы первое поле было выделено.
источник
сделано и сделано
источник
если вы знаете селектор элемента кнопки:
Должен сделать трюк для вас. Это сфокусирует кнопку ОК, и Enter «щелкнет» по ней, как и следовало ожидать. Это тот же метод, который используется в диалогах собственного пользовательского интерфейса.
источник
источник
Я нашел довольно простое решение этой проблемы:
источник
Это отлично сработало для меня ..
источник
Ни одно из этих решений не помогло мне в IE9. Я закончил с этим ..
источник
Нижнее тело используется, потому что диалоговое окно DIV добавлено в тело, поэтому теперь тело прослушивает событие клавиатуры. Он тестировался на IE8,9,10, Mojila, Chrome.
источник
Потому что у меня недостаточно репутации, чтобы оставлять комментарии.
Измененный ответ Basemm # 35 тоже добавьте в Escape, чтобы закрыть диалог.
источник
Работает нормально Спасибо !!!
open: function () { debugger; $("#dialogDiv").keypress(function (e) { if (e.keyCode == 13) { $(this).parent().find("#btnLoginSubmit").trigger("click"); } }); },
источник
Дайте своим кнопкам классы и выберите их обычным способом:
источник