ILoveYAnny
@ILoveYAnny

Как имитировать ввод текста в input чужого сайта на Angular?

Добрый день, есть такая задача. Есть input, при вводе текста загорается Save Changes. Куда я кликаю и всё сохраняется. Однако при вводе програмно через jQuery .val() кнопка сохранить не загорается. Как можно увидеть изменения в input?
Если поменять руками значение и кликнуть програмно по кнопке, выходит плашка что сохраняется, происходит перезагрузка страницы и всё работает. Если не руками, происходит клик по неактивной кнопке, вылезает плашка что сохраняется, но нет перезагрузки и после обновления видно что не сохранено.
Каликаю так
$('[ng-click="updateSite()"]').click()

Input
<input ng-value="site.shortName" type="text" name="shortName" ng-model="site.shortName" ng-minlength="3" ng-maxlength="39" required="required" ng-pattern="/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/i" ng-change="checkSubdomain()" class="showError ng-pristine ng-untouched ng-valid-pattern ng-valid-minlength ng-valid-maxlength ng-valid ng-valid-required" value="dgghfhgfj" style="">


Кнопка Save Change в не активном состоянии
<button ng-disabled="form.$invalid || !form.$dirty || !isValid()" ng-click="updateSite()" href="#" class="button success" disabled="disabled">Save Changes  </button>

Кнопка Save Change в активном состоянии
<button ng-disabled="form.$invalid || !form.$dirty || !isValid()" ng-click="updateSite()" href="#" class="button success">Save Changes  </button>


Пробовал в консоли запустить функцию updateSite(), но получаю ошибку что она не определена.
  • Вопрос задан
  • 31 просмотр
Решения вопроса 1
Xuxicheta
@Xuxicheta Куратор тега Angular
инженер
Попробуйте после $(el).val() сделать еще $(el).trigger( "change" )
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@zkrvndm
Боты, парсеры, расширения
После ввода текста на элементе вызовите события:
$('input')[0].dispatchEvent(new KeyboardEvent('keydown', { bubbles: true }));
$('input')[0].dispatchEvent(new KeyboardEvent('keypress', { bubbles: true }));
$('input')[0].dispatchEvent(new KeyboardEvent('keyup', { bubbles: true }));
$('input')[0].dispatchEvent(new Event('input', { bubbles: true }));
$('input')[0].dispatchEvent(new Event('change', { bubbles: true }));
$('input')[0].dispatchEvent(new Event('blur', { bubbles: true }));

Это заставит сработать обработчик и страница сможет увидеть изменения.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы