猿问

如何将焦点设置在输入字段上?

如何将焦点设置在输入字段上?

在AngularJS中,聚焦于输入场的“角度方式”是什么?

更具体的要求:

  1. 模态

    ,则将焦点设置为预定义的

    <input>

    在这个模态里面。
  2. 每次

    <input>

    变得可见(例如,通过单击某个按钮),将焦点设置在上面。

我试图达到第一个要求带着autofocus,但这只在第一次打开Modal时才起作用,而且只在某些浏览器中才起作用(例如,在Firefox中,它不起作用)。

任何帮助都将不胜感激。


波斯汪
浏览 687回答 3
3回答

桃花长相依

打开一个Modal时,将焦点设置在此Modal内预定义的<Input>上。定义一个指令,并让它$监视一个属性/触发器,这样它就知道什么时候可以聚焦元素:Name:&nbsp;<input&nbsp;type="text"&nbsp;focus-me="shouldBeOpen">app.directive('focusMe',&nbsp;['$timeout',&nbsp;'$parse',&nbsp;function&nbsp;($timeout,&nbsp;$parse)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//scope:&nbsp;true,&nbsp;&nbsp;&nbsp;//&nbsp;optionally&nbsp;create&nbsp;a&nbsp;child&nbsp;scope &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link:&nbsp;function&nbsp;(scope,&nbsp;element,&nbsp;attrs)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;model&nbsp;=&nbsp;$parse(attrs.focusMe); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope.$watch(model,&nbsp;function&nbsp;(value)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('value=',&nbsp;value); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(value&nbsp;===&nbsp;true)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$timeout(function&nbsp;()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;element[0].focus(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;to&nbsp;address&nbsp;@blesh's&nbsp;comment,&nbsp;set&nbsp;attribute&nbsp;value&nbsp;to&nbsp;'false' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;on&nbsp;blur&nbsp;event: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;element.bind('blur',&nbsp;function&nbsp;()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('blur'); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope.$apply(model.assign(scope,&nbsp;false)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;};}]);柱塞$timeout似乎是需要给模式时间来渲染。“2”每当<Input>变为可见时(例如,通过单击某个按钮),请将焦点设置在它上。创建一个本质上类似于上面的指令。观察某些作用域属性,当它变为真时(在ng-click处理程序中设置它),执行element[0].focus()..根据您的用例,您可能需要或不需要$timeout:<button&nbsp;class="btn"&nbsp;ng-click="showForm=true;&nbsp;focusInput=true">show&nbsp;form&nbsp;and &nbsp;focus&nbsp;input</button><div&nbsp;ng-show="showForm"> &nbsp;&nbsp;<input&nbsp;type="text"&nbsp;ng-model="myInput"&nbsp;focus-me="focusInput">&nbsp;{{&nbsp;myInput&nbsp;}}&nbsp;&nbsp;<button&nbsp;class="btn"&nbsp;ng-click="showForm=false"> &nbsp;&nbsp;hide&nbsp;form</button></div>app.directive('focusMe',&nbsp;function($timeout)&nbsp;{ &nbsp;&nbsp;return&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;link:&nbsp;function(scope,&nbsp;element,&nbsp;attrs)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope.$watch(attrs.focusMe,&nbsp;function(value)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(value&nbsp;===&nbsp;true)&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('value=',value); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//$timeout(function()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;element[0].focus(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope[attrs.focusMe]&nbsp;=&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//}); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;};});柱塞更新7/2013:我见过一些人使用我最初的隔离作用域指令,然后在嵌入式输入字段(即模态中的输入字段)中遇到问题。没有新作用域(或者可能是新的子作用域)的指令应该可以减轻一些痛苦。因此,上面我更新了答案,使之不使用隔离作用域。以下是原来的答案:1.的原始答案,使用隔离作用域:Name:&nbsp;<input&nbsp;type="text"&nbsp;focus-me="{{shouldBeOpen}}">app.directive('focusMe',&nbsp;function($timeout)&nbsp;{ &nbsp;&nbsp;return&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;scope:&nbsp;{&nbsp;trigger:&nbsp;'@focusMe'&nbsp;}, &nbsp;&nbsp;&nbsp;&nbsp;link:&nbsp;function(scope,&nbsp;element)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope.$watch('trigger',&nbsp;function(value)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(value&nbsp;===&nbsp;"true")&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$timeout(function()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;element[0].focus();&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;};});柱塞.使用隔离作用域的2.的原始答案:<button&nbsp;class="btn"&nbsp;ng-click="showForm=true;&nbsp;focusInput=true">show&nbsp;form&nbsp;and &nbsp;focus&nbsp;input</button><div&nbsp;ng-show="showForm"> &nbsp;&nbsp;<input&nbsp;type="text"&nbsp;focus-me="focusInput"> &nbsp;&nbsp;<button&nbsp;class="btn"&nbsp;ng-click="showForm=false">hide&nbsp;form</button></div>app.directive('focusMe',&nbsp;function($timeout)&nbsp;{ &nbsp;&nbsp;return&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;scope:&nbsp;{&nbsp;trigger:&nbsp;'=focusMe'&nbsp;}, &nbsp;&nbsp;&nbsp;&nbsp;link:&nbsp;function(scope,&nbsp;element)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope.$watch('trigger',&nbsp;function(value)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(value&nbsp;===&nbsp;true)&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//console.log('trigger',value); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//$timeout(function()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;element[0].focus(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scope.trigger&nbsp;=&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//}); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;};});柱塞.因为我们需要在指令中重置触发器/FocusInput属性,所以‘=’用于双向绑定。在第一个指令中,“@”就足够了。还请注意,当使用‘@’时,我们将触发器值与“true”进行比较,因为@总是产生字符串。
随时随地看视频慕课网APP

相关分类

AngularJS
我要回答