2014-09-02 85 views
30

我使用angularjs和我創建了一個正常輸入領域是這樣的:Angularjs輸入字段焦點事件?

<input type="text" style="border: none" ng-model="model" > 

我要做到以下幾點:

,如果有人點擊輸入字段,我想呼籲例如方法A,然後他在該字段中寫入文本,並且如果用戶在我的頁面中的某處單擊以使輸入字段不再集中,它應該調用方法B.這是否可以使用angularjs?如果是的話,我該怎麼做? ng-focus僅在輸入事件處於活動狀態,但不在輸出處。

我想用此方法鎖定某些方法,方法A只將值設置爲true,方法B將相同的值設置爲false。但我必須知道什麼時候輸入字段是活動的,什麼時候沒有。

回答

47

您正在查看ng-focusng-blur

<input type="text" style="border: none" ng-model="model" ng-focus="A()" ng-blur="B()"> 

在一個側面說明,使用CSS類,而不是內嵌樣式.. :)

或者只需要調用與參數相同的方法和設置的值ACC: -

<input type="text" style="border: none" ng-model="model" ng-focus="A(true)" ng-blur="A(false)"> 
+1

http://plnkr.co/edit/Wo0Lp0?p=preview – PSL 2014-09-02 22:18:14

3

你可以B法結合至角的納克模糊指令以檢測當輸入失去焦點

<input type='text' ng-focus='methodA()' ng-blur='methodB()' ng-model='model'> 
5

如果您正在使用您可能希望應用於整個應用程序中的字段的功能,則可以將其置於指令中。 這裏是添加和刪除根據場上的焦點或模糊的CSS類的例子:

angular.module('myApp').directive('inputFocus', function() { 

var FOCUS_CLASS = 'input-focused'; 
return { 
    restrict: 'A', 
    priority: 1, 
    require: 'ngModel', 
    link: function (scope, element, attrs, ctrl) { 
    element.bind('focus',function() { 
     element.parent().addClass(FOCUS_CLASS);  
    }).bind('blur', function() { 
     element.parent().removeClass(FOCUS_CLASS); 
    }); 
    } 
}; 
}); 
+0

尼斯和整潔的 - 你可以也可以使用來自jQuery的'element.focus()'和'element.blur()',因爲這會讓它更整潔一些。 – Boris 2016-03-01 10:41:54