2014-04-18 235 views
5

我有一个需要输入最少字符的输入。当用户开始输入内容,然后切换到另一个字段而没有达到所需的最小字符数时,我想更改文本类以将其变为红色。检查输入是否有焦点

我已经使用这个代码,以检测当焦点改变尝试,但它不工作:

$scope.$watch(function(){ 
    return $('#job_desc').is(':active'); 
}, function(){ 
    console.log('test'); 
}) 

是什么问题?

非常感谢

+0

您是否额外添加jQuery到您的角度项目或依赖angular的jquery-lite(默认情况下)? – zwacky

+0

我也有jquery – Spearfisher

+0

为什么你不绑定所需的表单元素的模糊事件? '('。blur'')。bind('blur',function(evt){...});'如果你需要重新计算它,你可以在blur事件回调中做一个范围$ apply() 。 – zwacky

回答

12

如果您正在使用angularjs 1.2你有两个指令,以帮助您看,如果一个字段具有焦点:NG-重点和NG-模糊。如果没有,实现你自己的指令很简单。代码(plunker)

<!DOCTYPE html> 
<html ng-app="plunker"> 

    <head> 
    <meta charset="utf-8" /> 
    <title>AngularJS Plunker</title> 
    <script>document.write('<base href="' + document.location + '" />');</script> 
    <link rel="stylesheet" href="style.css" /> 
     <script data-require="jquery" data-semver="2.0.3" src="http://code.jquery.com/jquery-2.0.3.min.js"></script> 

    <script data-require="[email protected]" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js" data-semver="1.2.16"></script> 
    <script src="app.js"></script> 
    </head> 

    <body ng-controller="MainCtrl"> 
    <p>Hello {{name}}!</p> 
    <form> 
     <input ng-model="name" id="name" ng-focus="focused()" ng-blur="blurred()"> 
     <input ng-model="name2"> 
    </form> 
    </body> 

</html> 

和JavaScript

var app = angular.module('plunker', []); 

app.controller('MainCtrl', function($scope) { 
    $scope.name = 'World'; 
    $scope.focused = function() { 
    console.log("got focus"); 
    } 

    $scope.blurred = function() { 
    console.log("lost focus"); 
    } 
}); 

如果在另一方面,你只是想验证,看看在angularjs表单验证,像myForm.myInput $有效。 Angularjs相应地设置了ng有效和ng无效的类。

1

你也可以用特定的选择器来听,就像这样。

function listenForFocus() { 
    var el = angular.element(document.querySelectorAll('input, select')); 
    for (var i = 0; i < el.length; i++) { 
     var element = angular.element(el[i]); 
     element.bind('blur', function (e) { 
      console.log('blur'); 
     }); 
     element.bind('focus', function (e) { 
      console.log('focus'); 
     }); 
    } 
}