当前位置: 首页 > 知识库问答 >
问题:

AngularJS:将焦点设置在指令中以前隐藏的输入元素上

孙和安
2023-03-14

当调用scope.titlechange函数时,将显示输入。这个函数(绑定到ng-dblclick指令)只是将true设置为scope.iseditshow,并尝试调用jQuery对输入元素的focus()方法(以前存储在链接器函数的作用域中,作用域为scope.input=$(“input:text”,ae);:

scope.isEditShown = true;
scope.input.focus();

简而言之,我想在双击某物时可视化以前隐藏的输入,并立即对其进行聚焦。需要即时焦点,因为当输入失去焦点时会隐藏(我希望用户能够立即编辑输入内容。当用户点击离开时,输入会隐藏)。

问题是,我似乎不能以编程方式将焦点放在input元素上。经过实验,我发现当执行scope.iseditshow=true;时,输入还不可见(=angular js在DOM中不显示它),并且用scope.input.focus();将焦点设置为隐藏的输入也不起作用。当input元素最终显示时,它是不聚焦的。

什么是角方式来做我想要的?何时可以确保显示输入,何时可以有效地调用focus()?注意:如果我在将焦点放在输入之前使用scope.$apply(),我将得到$apply已经在进行异常。如果我做了一个安全的申请,犯规不会被判。看到柱塞了。

(附言:我真的很想理解,所以我不会使用自动为我做这件事的同伴图书馆)

共有1个答案

巫马盛
2023-03-14

当您对某个数据绑定变量进行更改并需要等待相应的呈现时,您需要使用著名的settimeout0(或者在Angular中使用$timeout服务)。

这里有一个plunkr展示了如何做到这一点。

http://plnkr.co/edit/n9p7xhzqqjbqsnqnhdlm?p=preview

 类似资料:
  • 问题内容: 我正在创建一条指令以从验证中排除隐藏的输入元素:http : //plnkr.co/edit/Vnwvq2AT7JpgTnoQwGh9?p=preview 这里的想法是,如果该元素是隐藏的,我将从窗体中删除该控件,以便它不会影响其他输入的有效性。当我打电话时,它工作正常 ,您可以通过删除名字并单击按钮以隐藏字段来在演示中进行测试。 但是,当我再次单击该按钮时,即使名字无效(空),形式有

  • 如何在Elm中设置Html元素的焦点?我试图在元素上设置自动聚焦属性,它只在页面加载上设置焦点。

  • 考虑到jquery的方式,但我想用angular的方式来实现这一点,我做了一个解决方案,我们使用元素的id在任何函数中设置焦点,所以,由于我在angular方面非常新手,我想了解一些意见,如果这种方式是正确的,有什么问题,无论什么,任何可以帮助我在angular中更好地实现这一点的方法。 基本上,我创建一个指令,监视用户用指令定义的作用域值,或者默认的focusElement,当该值与元素的id相

  • 问题内容: 在查看了如何使用角度设置焦点元素的示例后,我看到它们中的大多数使用一些变量来监视然后设置焦点,并且它们中的大多数对于要设置焦点的每个字段使用一个不同的变量。在具有许多字段的形式中,这意味着存在许多不同的变量。 考虑到jquery的方式,但是想以角度的方式做到这一点,我提出了一个解决方案,我们使用元素的id将焦点设置在任何函数上,因此,由于我在角度上非常陌生,因此我希望得到一些意见那个方

  • 问题内容: 我将AngularJS与ng-repeat指令一起使用,以将对象数组显示为列表。 属性“ isNewest”仅在数组的一个元素上为true。我想将键盘焦点设置在该项目的文本输入上。如何使用AngularJS做到这一点? 问题答案: 这是另一个使用attrs。$ observe的指令实现: 请注意,插值的DOM属性值(即)始终计算为字符串,因此将原因与字符串而不是keyword进行比较。