Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用Javascript对光标进行聚焦_Javascript_Angularjs - Fatal编程技术网

无法使用Javascript对光标进行聚焦

无法使用Javascript对光标进行聚焦,javascript,angularjs,Javascript,Angularjs,我有一个有棱角的应用程序。在一个控制器中,我有一个隐藏的答案字段。使用ng click单击按钮时,将显示该字段。我想将光标聚焦在该字段中。我试过使用: document.getElementById("answer").focus(); 但这不起作用。但是,当提交答案时,会运行一些代码,然后运行document.getElementById(“答案”).focus()工作 显示该字段的原始函数是: $scope.startStream = function () { $scope.show

我有一个有棱角的应用程序。在一个控制器中,我有一个隐藏的答案字段。使用ng click单击按钮时,将显示该字段。我想将光标聚焦在该字段中。我试过使用:

document.getElementById("answer").focus();
但这不起作用。但是,当提交答案时,会运行一些代码,然后运行
document.getElementById(“答案”).focus()工作

显示该字段的原始函数是:

$scope.startStream = function () {
  $scope.showStream = true;
  document.getElementById("answer").focus();
};

为什么它不聚焦光标

我知道这里的问题是“为什么它不聚焦光标”


这是因为在整个函数执行后,模板由Angular处理。此时,showStream被选中,按钮出现。调用document.getElementBy时,模板尚未处理,且按钮不存在。

如果要使用
$scope.showStream
,可以使用一个简单的指令:

angular.module('app')
    .directive('focusOnMe', function () {
        return {
            scope: {
                showStream: '='
            },
            link: function ($scope, $element, $attrs) {
                $scope.$watch('showStream', function () {
                    if ($scope.showStream) {
                        $element[0].focus();
                    }
                });
            }
        };
    });
这样使用:

<input type="text" ... focus-on-me="showStream" />


正如上面的评论所提到的,您尝试这样做的方式并不是通常以角度来完成的。您应该使用另一种解决方案(从链接中)来正确地执行此操作。当您试图从控制器中的DOM中获取元素时,您就知道有些事情做得不对。我不知道如何对此进行表决。但我肯定看到过其他指令,它看起来确实比操作DOM更好。Angular的思想是DOM操作是由数据驱动的,因此指令比直接选择元素更受欢迎。哦,好的,非常感谢。