Как я могу использовать JS, чтобы заполнить простое поле ввода, когда ".value = ***" не распознается? - PullRequest
0 голосов
/ 20 мая 2019

Каждый день у меня есть трекер шагов "здоровье и фитнес", который нужно вводить на работе.Я пытаюсь использовать TamperMonkey для автоматизации большей части этого.Однако у меня возникают проблемы при получении поля ввода для проверки моего «значения».

enter image description here

Я выполняю консольную команду:

document.getElementById("self-enter-steps-input").value = 3000;

, что приводит к:

enter image description here

Однако, когда я нажимаю «Сохранить» вручную, я получаю следующую ошибку:

enter image description here

Если я нажимаю «Сохранить» программно, окно закрывается, но номер не регистрируется.Если я нажму «backspace» или введу дополнительный «0» вручную, все поле будет проверено и сохранит все значение, если я нажму «submit».

Я также попытался ввести значение в виде строки, т.е.

document.getElementById("self-enter-steps-input").value = "3000";

Поле проверяется, но значение не записывается.Простое нажатие на клавишу возврата или дополнительное число, введенное вручную, делает запись всего поля.

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

Ответы [ 2 ]

1 голос
/ 20 мая 2019

Возможно, вам потребуется вручную запустить прослушиватель изменений, отправив событие change вручную:

const steps = document.getElementById("self-enter-steps-input");
steps.value = "3000";
const change = new InputEvent('change', { bubbles: true });
steps.dispatchEvent(change);

Похоже, проверка ввода происходит либо на change, blur (или, альтернативно, focusout, потому что blur не будет пузыриться), либо input. Пожалуйста, проверьте ваши инструменты разработчика, для какого события на самом деле прослушивается, и скорректируйте код, который я дал соответственно.

1 голос
/ 20 мая 2019

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

var inputElement = document.getElementById("self-enter-steps-input");
var e = document.createEvent('HTMLEvents');

inputElement.value = 3000;

e.initEvent('change', false, true);
inputElement.dispatchEvent(e);
...