Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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
Jquery AngularJS.focus()在链接函数中不起作用_Jquery_Angularjs_Angularjs Directive - Fatal编程技术网

Jquery AngularJS.focus()在链接函数中不起作用

Jquery AngularJS.focus()在链接函数中不起作用,jquery,angularjs,angularjs-directive,Jquery,Angularjs,Angularjs Directive,为什么如果我有以下指令,它会起作用: angular.module('app', []) .directive('selectOnFocus', function(){ return{ restrict: 'A', link: function(scope, element){ element[0].focus(); } }; }); 但如果

为什么如果我有以下指令,它会起作用:

angular.module('app', [])
    .directive('selectOnFocus', function(){
        return{
            restrict: 'A',
            link: function(scope, element){
                element[0].focus(); 
            }
        };
    });
但如果我换成这个,它会说element.focus不是一个函数。为了让这段代码正常工作,我需要在index.html中导入jquery

angular.module('app', [])
    .directive('selectOnFocus', function(){
        return{
            restrict: 'A',
            link: function(scope, element){
                element.focus(); 
            }
        };
    });
这是我的HTML:

<html>

<head>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js"></script>
  <script src="app.js"></script>
</head>

<body ng-app="app">
  <div>
    <label>Name:</label>
    <input type="text" ng-model="yourName" placeholder="Enter a name here" select-on-focus >
    <hr>
    <h1>Hello {{yourName}}!</h1>
  </div>
</body>

</html>
这是因为在jqLite中不支持焦点,而且从angular docs开始就不支持焦点

如果jQuery不可用,angular.element将委托给angular jQuery的内置子集,称为jQuery lite或jqLite

这是因为在jqLite中不支持焦点,而且从angular docs开始就不支持焦点

如果jQuery不可用,angular.element将委托给angular jQuery的内置子集,称为jQuery lite或jqLite


我想问题是,为什么您的代码使用元素[0].focus,而不是元素[0].focus。如@mcranston18的注释所示,答案是元素返回一个jqLite对象。请参阅文档中的指令,以及jqLite元素,以更深入地了解这意味着什么。此外,更新后的JSFIDLE中元素对象的简单控制台日志显示了jqLite对象内部的内容

简而言之,当您包括jQuery和call element.focus时,您使用的是jQuery focus方法。当您使用元素[0].focus时,您正在访问DOM元素本身并使用纯JavaScript。我建议不要对Angular使用jQuery,而要习惯使用jqLite。您会发现您可能不需要jQuery和Angular


希望这有帮助

我认为问题是,为什么您的代码使用元素[0].focus,而不是元素[0].focus。如@mcranston18的注释所示,答案是元素返回一个jqLite对象。请参阅文档中的指令,以及jqLite元素,以更深入地了解这意味着什么。此外,更新后的JSFIDLE中元素对象的简单控制台日志显示了jqLite对象内部的内容

简而言之,当您包括jQuery和call element.focus时,您使用的是jQuery focus方法。当您使用元素[0].focus时,您正在访问DOM元素本身并使用纯JavaScript。我建议不要对Angular使用jQuery,而要习惯使用jqLite。您会发现您可能不需要jQuery和Angular


希望这有帮助

查看此答案:查看此答案:要访问direct DOM元素,其始终仅为元素[0]?在什么情况下,元素数组中会有多个项?根据文档,元素是该指令匹配的jqLite包装元素。因此,在您的情况下,链接函数中始终会有一个jqLite包装的元素。我尝试使用元素[0]。但在运行测试时,我得到的结果类似于focus不是函数。但是如果我使用元素[0],它的效果就像一个符咒。选择。您知道我为什么会出现此错误吗?所以要访问direct DOM元素,它总是只包含元素[0]?在什么情况下,元素数组中会有多个项?根据文档,元素是该指令匹配的jqLite包装元素。因此,在您的情况下,链接函数中始终会有一个jqLite包装的元素。我尝试使用元素[0]。但在运行测试时,我得到的结果类似于focus不是函数。但是如果我使用元素[0],它的效果就像一个符咒。选择。你知道我为什么会犯这个错误吗?