【问题标题】:How to get all form elements when the DOM is ready?DOM准备好后如何获取所有表单元素?
【发布时间】:2020-07-22 08:02:07
【问题描述】:

我想获取所有表单元素(输入、文本区域等),以便在模糊时为所有这些元素添加功能。

由于 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 语句来显示特定的输入字段。也许这就是问题所在。但我不知道。

【问题讨论】:

  • 您使用的是哪个版本的 Angular? AngularJS 1.x 的标签是 angularjs,而 Angular 2+ 的标签是 angular
  • 错误,仅更改为正确的。角度js。
  • 什么是this.$element[0],您是动态创建表单还是表单域?
  • $element[0] 返回类似
    的元素
  • @您是否需要提供一个工作代码 sn-p 以至少检查代码和帮助。您的问题太模糊,无法回答

标签: javascript angularjs forms


【解决方案1】:

仅供参考:我使用ng-switch 和一些ng-if 语句来显示特定的输入字段。也许这就是问题所在。

要将函数添加到所有<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-repeatng-switchng-viewng-includeng-if 等指令都会在不同时间向 DOM 添加元素。 AngularJS 框架在将此类元素添加到 DOM 时为指令调用 postLink 函数。

有关详细信息,请参阅

【讨论】:

  • 这是否将函数直接添加到输入字段?我怎样才能将 textareas 链接到这个指令?
  • 我可以将指令添加为一个单独的文件并像这样包含它(对控制器和模板执行此操作):控制器:fieldController,模板:模板
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-19
  • 1970-01-01
  • 2015-07-12
  • 2012-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多