Как получить все элементы формы, когда DOM готов? - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу получить все элементы формы (input, textarea, et c.), Чтобы добавить функцию ко всем этим элементам при размытии.

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

$scope.$watch('$viewContentLoaded

, но это не сработало, потому что я не использую ngView и мне не нужен ngView.

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

Я пытался:

angular.element(document).ready

, но это также не получало элементы.

Вот код, который работает, но не лучшее решение:

$timeout(() => {
 const allFormElements = $element[0].querySelectorAll('input, textarea');
 const formElement= angular.element(allFormElements[0]);
 formElement.on('blur', function() {
   console.log('THis is blur');
 });
}, 500);

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

К вашему сведению: я использую ng-switch и некоторые операторы ng-if для отображения определенных c полей ввода. Может быть, это проблема. Но я не знаю.

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

К вашему сведению: я использую ng-switch и некоторые операторы ng-if для отображения определенных c полей ввода. Возможно, это проблема.

Чтобы добавить функцию ко всем <input> элементам, определите ее как директиву:

app.directive("input", function() {
    return {
        restrict: "E",
        link: postLink
    };
    function postLink(scope, elem, attrs) {
        elem.on('blur', function(ev) {
            console.log('THis is blur', ev.target);
        });
    }
});

Директивы, такие как ng-repeat, ng-switch, ng-view, ng-include и ng-if все добавляют элементы в DOM в разное время. Каркас AngularJS вызывает функцию postLink для директив при добавлении таких элементов в DOM.

Для получения дополнительной информации см.

0 голосов
/ 09 апреля 2020

Вы можете попробовать обернуть ваш код внутри функции и

document.onload = yourFunction
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...