【问题标题】:Angularjs: Select and focus of an element in directive linkAngularjs:在指令链接中选择和聚焦元素
【发布时间】:2015-01-28 23:50:29
【问题描述】:

我正在尝试使用我的自定义指令从一开始就选择并聚焦一个文本输入字段。

输入字段:

<input type="text" value="Preset Value" select-on-load />

自定义指令:

app.directive('selectOnLoad', function () {
// Linker function
return {
    restrict: 'A',
    link: function (scope, element, attrs) {
        element.focus().select();
    }
};

});

但我只收到一个 javscript 错误,说焦点/选择不是一个函数。 我应该怎么做呢?

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    Angular 的 jqLit​​e(jQuery 的内置轻量版)不支持.focus()

    您需要获取实际的 DOM 元素并使用 Javascript 的内置 .focus()

    element[0].focus()
    

    element[0] 从 jqLit​​e 包装器 element 获取 DOM 元素对象)

    使用.select(),如果您尝试选择来自ng-model 的文本,则有点棘手,因为在link 函数运行时,ng-model 的值尚未被插值并插入到 DOM 中。

    您需要等到摘要周期结束,而我看到的常用方法是通过$timeout

    $timeout(function(){
      element[0].select();
    });
    

    【讨论】:

    • 好吧,焦点有效,但选择无效。我通过 ng-model 在我的控制器中设置文本输入的内容,这是否发生在 select() 之后,这意味着我必须延迟选择?
    • 是的,您需要延迟选择,直到 ng-model 值被编译和链接。更新了答案
    • 好的,就是这样。非常讨厌。认为当 allll 完成时链接会被调用。
    • “全部完成” - 已编译和预链接,但输入中的值尚未插入
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 2013-07-12
    • 1970-01-01
    相关资源
    最近更新 更多