Глобальная функция ввода для всех элементов

Я написал код:

$('*').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() на вызываемую функцию (и).

Я знаю, что это не тот ответ, который вы искали, но я считаю, что вы должны рассмотреть этот метод как более конкретный (и более надежный).

Другие вопросы по тегам