2015-06-12 77 views
0

我想添加點擊處理程序到ng-focus回調,以開始收聽所有未來的點擊事件。但是,當點擊發起焦點時,點擊處理程序也會立即觸發。我可以用$timeout來解決這個問題,但這是一種破解,它違背了我所代表的一切。我成了什麼?!Angular.js中焦點事件的單獨點擊事件

我的HTML:

<input type="text" name="q" ng-focus="inputFocus($event)" /> 

這.js文件工作(這是一個指導的鏈接功能內):

scope.inputFocus = function (e) { 
    scope.displayHistory = true; 
    $timeout(function() { 
     $document.on('click', hideHistory); 
    }, 200) 
}; 

function hideHistory() { 
    scope.displayHistory = false; 
    scope.$digest(); 
    $document.off('click') 
}; 

我想下面的工作,但問題是,點擊回叫立即觸發。如您所料,如果我將標籤添加到此字段,則不會調用點擊回叫。但是如果焦點事件由點擊觸發,則hideHistory被調用。

scope.inputFocus = function (e) { 
    scope.displayHistory = true; 
    $document.on('click', hideHistory); 
}; 

我打過電話e.stopPropagation()e.stopImmediatePropagation()但這些方法都不能有效無論是。

+0

在點擊函數中設置布爾值以檢查焦點是否被觸發,然後只有在焦點等於true時才運行click函數。 – mrdeleon

回答

0

你試過e.preventDefault();

無論如何,你可以提供一個小提琴來說明究竟是怎麼回事?

+0

preventDefault無效 - 結果相同。 – Brett

+0

對不起,由於公司政策不能提供小提琴。 – Brett

+0

也許看看這個 http://stackoverflow.com/questions/17439530/angularjs-directive-how-to-let-an-event-only-be-triggered-once-if-otherwise-it –