Функция Javascript .click() не работает

Я пробую Javascript на платформе Microsoft с консоли. Что я сделал, так это ввел значение такой формы

document.forms[0][0].value = "[email protected]";

Когда я ищу следующую кнопку, я могу сделать и этот файл.

document.forms[0][3]

https://imgur.com/a/JUn9tKt

Моя проблема возникает, когда я пытаюсь нажать кнопку с помощью JavaScript, используя

document.forms[0][3].click()

https://imgur.com/a/b3cit0E

Что странно, так это то, что когда я ВРУЧНУЮ нажимаю кнопку «Далее», это работает, но, похоже, не работает с JavaScript. Что я делаю не так?

Эти индексные числа ничего не значат без HTML. Сделайте себе одолжение: вызовите такие функции, как document.getElementById() или document.querySelector(), для доступа к элементам DOM.

Barmar 01.05.2024 23:37

Пожалуйста, опубликуйте минимально воспроизводимый пример . Вы можете использовать Фрагмент стека, чтобы сделать его исполняемым.

Barmar 01.05.2024 23:38

Ссылки в ОП выглядят подозрительно.

Alex Kudryashev 01.05.2024 23:55

Я использовал document.getElementById("i0116").value = "[email protected]"; и document.getElementById("idSIButton9").click(). Это все равно дает ту же проблему.

phil_sw 02.05.2024 00:00

Комментарий, состоящий всего из двух операторов и без HTML, не является минимально воспроизводимым примером .

Barmar 02.05.2024 00:47

Вам нужно опубликовать достаточно кода, чтобы мы могли увидеть, что должно делать нажатие кнопки, и выяснить, почему она этого не делает.

Barmar 02.05.2024 00:49

И опубликуйте его в виде текста (желательно фрагмента стека), а не скриншота.

Barmar 02.05.2024 00:49

@Barmar Весь код, необходимый для воспроизведения проблемы, указан в вопросе. Попробуйте посетить login.microsoftonline.com и ввести команды document.forms[0][0].value = "[email protected]"; и document.forms[0][3].click(). Вы увидите именно то, что показано на обоих скриншотах. Не вижу проблемы в вопросе. Проблема описана очень коротко и ясно.

Foxyz 02.05.2024 01:04

@Foxyz Эта информация должна быть в самом вопросе. Комментарии всегда подлежат удалению. И вряд ли было очевидно, что вы говорите о стороннем сайте, а не о написанном вами коде.

Barmar 02.05.2024 16:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
9
125
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я попробовал и заметил, при каких условиях это происходит. Ошибка выдается только в том случае, если вы вводите значение программно и затем нажимаете «Отправить».

Проблема не в том, что кнопка «Отправить» не работает, проблема в том, что вы вводите адрес электронной почты в поле ввода. Электронная почта вводится в поле, но базовый JavaScript, вероятно, не запускается из-за установки значения через скрипт. Щелчок по текстовому полю вручную, а затем запуск функции щелчка работает.

Я заметил, что JavaScript, который устанавливает адрес электронной почты, введенный в поле ввода, запускается, когда вы щелкаете за пределами поля ввода. Это наводит меня на мысль, что это прослушиватель событий, который устанавливает переменную в JavaScript, и эта переменная — это то, что отправляется на сервер, а не входные данные напрямую из поля.

Чтобы обойти эту проблему, мы сначала проведем небольшой обратный инжиниринг и посмотрим, как это работает. К счастью, JavaScript очень прост, и мы можем легко увидеть все прослушиватели событий, используя удобные инструменты разработчика в нашем браузере, такие как Firefox:

и Хром:

Все, что нам нужно сделать, это попытаться отправить некоторые из этих событий и посмотреть, какие из них эффективны.

Чтобы определить, сработало ли событие, которое я отправлял, я сначала отправил событие щелчка на следующую кнопку, чтобы она показывала ошибку, по сути делая именно то, что вы сделали, чтобы намеренно добиться сбоя, и пытался отправлять события в поле ввода, пока ошибка не исчезла. поскольку нажатие вручную рядом с полем ввода также привело к исчезновению ошибки, что указывает на то, что значение JavaScript для поля ввода было обновлено через прослушиватель событий.

Поскольку мы знаем, что JavaScript запускается, когда что-то происходит с полем ввода, мы можем начать с предположения, что поле ввода имеет прослушиватель событий, который Сначала я попробовал отправить события фокусировки и размытия. Это не сработало, поэтому я попробовал выбрать, что тоже не сработало. Затем я попробовал событие изменения и успех!

Вот код JavaScript, который я написал для этого:

{
  const event = new Event("change");
  document.forms[0][0].value = "[email protected]";
  document.forms[0][0].dispatchEvent(event);
  document.forms[0][3].click();
}

Обратите внимание, что я поместил его в блок, просто чтобы настроить область действия, чтобы избежать повторного объявления этой переменной события, поскольку потенциально может потребоваться вставить этот сценарий в консоль несколько раз.

Простыми словами, вот что мы делаем:

  1. Создайте новый объект Event (используя конструктор Event, поскольку createEvent устарел).
  2. Инициализируйте наше событие как тип «изменение».
  3. Установите значение так, как вы пробовали изначально.
  4. Отправьте событие «change» в поле ввода, чтобы заставить JavaScript принять значение поля ввода и сохранить его в своей переменной.
  5. Нажмите следующую кнопку.

Еще одно улучшение, которое следует сделать, — это избегать повторения подобных слов:

{
  const email = "[email protected]"; // We separate this to make modifying easier.

  const form = document.forms[0];
  form[0].value = email;
  form[0].dispatchEvent(new Event("change"));
  form[3].click();
}

Если у вас есть какие-либо другие проблемы или вопросы, связанные с изучением JavaScript, вы всегда можете обратиться за помощью! Если какой-либо из моих шагов неясен, вы можете сообщить мне, я пытаюсь немного объяснить мыслительный процесс, чтобы вы могли научиться использовать доступные инструменты для устранения проблем, с которыми вы сталкиваетесь, чтобы вы не только получили решение, но и поняли откуда пришло это решение.

Event.initEvent() устарел. Вместо этого вы можете использовать const event = new Event("change").
PRO 02.05.2024 01:52

Привет @Foxyz, не мог бы ты отредактировать свою фотографию, потому что я не вижу ее в твоем ответе?

phil_sw 02.05.2024 08:39

Foxyz, не могли бы вы также сказать мне, почему я не могу использовать, например, случайный щелчок document.getElementById("i0281").click(); (Нажмите за пределами поля), это не работает? Мне очень любопытно, как вы нашли решение, требующее события, но я не вижу этого на картинке.

phil_sw 02.05.2024 08:51

@PRO Спасибо, что сообщили мне! Я какое-то время не использовал обработчики событий, поэтому нужно немного узнать, какие их части устарели. Делать это так, как вы объясняете, имеет больше смысла, мне было интересно, для чего нужен этот параметр. Я обновлю код.

Foxyz 02.05.2024 19:24

@phil_sw Я попробовал вручную щелкнуть рядом с полем, но это тоже не сработало. Это позволило мне нажать кнопку «Далее» только после того, как я сначала щелкнул поле ввода, а затем щелкнул где-то еще. На самом деле я сначала подумал о моделировании событий щелчка с использованием событий вместо функции click(). Я не был уверен, читает ли он поле ввода только после того, как событие щелчка было выполнено внутри определенной области экрана, или он может прослушивать события щелчка в родительских элементах поля ввода. Способ запуска JavaScript — это прослушиватели событий, поэтому я попытался имитировать события в поле ввода.

Foxyz 02.05.2024 19:30

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