Обнаружение автоматического нажатия в браузере

#javascript #jquery #javascript-events

#javascript #jquery #jquery-события

Вопрос:

У меня возникли некоторые проблемы при реализации моего плагина jQuery. Мне нужен плагин, который показывает мне некоторый элемент (всплывающее окно) и скрывает его, когда я нажимаю за пределы этого элемента.

Я реализовал этот плагин. Но у меня проблемы с формами во всплывающем окне. Когда я вычисляю координаты нажатого элемента, я использую pageX pageY свойства и .

Но есть некоторые интересные вещи, когда я пытаюсь отправить форму с помощью ENTERключа. Когда я нажимаюENTER, браузер запускает событие «щелчка» на кнопке отправки, но pageX значение и pageY этой кнопки равно 0. В event.target я вижу свою кнопку.

Когда я сам нажимаю кнопку отправки — все в порядке.

Вопрос: как я могу определить, кто нажал эту кнопку? Пользователь или браузер? (без каких-либо всплесков, таких как обнаружение клавиши ввода при вводе или так далее)

Дополнительно: как вы можете видеть здесь, события разные (при нажатии на «Отправить» и «НажатьENTER«). Но разница настолько мала… Я вижу только, что свойство ‘detail’ имеет значение 0, когда мы отправляем форму с помощью ENTER. Подробным свойством является количество щелчков по элементу для события мыши.

Это единственный способ обнаружить отправку? Правильно ли это?

Комментарии:

1. Может быть, вам следует использовать .submit() rather then .click() ?

2. Что такое «шипы»? Как браузер может нажать кнопку?

Ответ №1:

Если вы привязываете обработчик щелчка к событию щелчка, а затем вызываете щелчок программно, а также по щелчку пользователя, и хотите различать два события в обработчике, вы можете проверить наличие EventObject.originalEvent, который установлен в пользовательском щелчке, но не в вызове .click() .

Пример:

$('#el').click(function(evt){ if(evt.originalEvent){ //user click } else { // .click() call } });

Комментарии:

1. Хороший подход. Я этого не знал. Но в моей ситуации это не решение; (

Ответ №2:

Как насчет тестирования pageX == 0 AND pageY == 0 ?

Или даже лучше, предполагая, что это форма (это следует из вашего сообщения), почему бы не использовать .submit() rather then .click() ?

Комментарии:

1. Я думаю, это всплеск 🙂 Подтверждена ли информация о том, что браузер нажимает на кнопку и устанавливает pageX и pageY равными 0? Это браузеры по умолчанию?

2. @InviS нет, но это территория TIAS. Вам действительно следует поработать с .submit() этим.

3. Закрыть форму при любом событии отправки? или что-то в этом роде? >> почему бы не использовать .submit() вместо .click() — браузер генерирует событие click() … ((

4. @InviS точно. Я имею в виду, что вы пытаетесь настроить таргетинг на нажатие кнопки отправки, которая, в свою очередь, отправляет форму. Поэтому используйте более общий подход и проверяйте отправку, а не щелчок.

5. Формы есть не везде 🙂 На самом деле я могу использовать событие submit () для форм внутри всплывающего окна. Но событие «щелчка» в форме отправки действительно странно. Никогда не слышал об этом.