#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 () для форм внутри всплывающего окна. Но событие «щелчка» в форме отправки действительно странно. Никогда не слышал об этом.