Глобальная функция ввода для всех элементов
Я написал код:
$('*').on('keyup',function(e){
if(e.keyCode == 13){
$(this).trigger('click');
}
});
приведенный выше код работает нормально до появления диалога jquery. Видимо всякий раз, когда я нажимаю клавишу ввода в диалоговом окне. это как пузыри на мероприятии.
У меня есть 2 диалога. 1-е - это диалоговое окно подтверждения, а 2-е - диалоговое окно сообщения. когда я нажимаю "да", появляется диалоговое окно с сообщением, и когда я нажимаю "ОК" в диалоговом окне, снова открывается диалоговое окно подтверждения.
Я пытался так:
$('*').not('.ui-button').on('keyup',function(e){
if(e.keyCode == 13){
$(this).trigger('click');
}
});
это для исключения кнопок пользовательского интерфейса для ввода событий. это не работает. Любая помощь будет оценена. Спасибо
РЕДАКТИРОВАТЬ:
обратите внимание, что я вызываю диалоги, чтобы открыть, используя ссылку. Интересно, если эта ссылка сфокусирована, когда я нажимаю Enter, она снова вызывает диалог, когда я нажимаю Enter в диалоговом окне сообщения.
5 ответов
Я исправил проблему, размывая ссылку, по которой щелкнул, чтобы открыть диалоговое окно.
что-то вроде:
$('.links').find('a').on('click',function(){
$(this).blur();
});
Почему бы не отменить свое мероприятие с помощью off
?
$('*').on('keyup',function(e){
if(e.keyCode == 13){
$(this).trigger('click');
}
}).find(".ui-buttons").off('keyup'); // this unbinds the event so it won't trigger
Используйте этот код, этот код исключает .ui-button
элемент и внутренние элементы .ui-button
учебный класс
$('body').on('keyup',function(e){
if(!$(e.target).closest('.ui-button').length && e.keyCode == 13){
$(e.target).trigger('click');
}
});
Возможно, что кнопки пользовательского интерфейса не создаются при регистрации обработчиков.
Один из подходов, который вы можете сделать, - это зарегистрировать один обработчик для объекта документа, а затем посмотреть, является ли фактическая цель ui-button
лайк
$(document).on('keyup', function (e) {
var $target = $(e.target);
if ($target.closest('.ui-button').length) {
return;
}
if (e.keyCode == 13) {
$target.trigger('click');
}
});
Я признаю, что я не большой поклонник глобальных привязок, особенно из-за этих проблем. Я считаю, что лучше указать типы и / или расположение элементов, с которыми я хочу связать событие.
Одна из причин - это всплывающее событие, которое, к сожалению, не ведет себя одинаково во всех браузерах.
Мое предложение - привязать событие только к желаемым элементам и добавить e.stopPropagation()
на вызываемую функцию (и).
Я знаю, что это не тот ответ, который вы искали, но я считаю, что вы должны рассмотреть этот метод как более конкретный (и более надежный).