簡體   English   中英

在Angular.js中將點擊事件與焦點事件分開

[英]separate click event from focus event in Angular.js

我想向ng-focus回調添加點擊處理程序,以開始偵聽所有將來的點擊事件。 但是,當通過單擊啟動焦點時,單擊處理程序也會立即觸發。 我可以用$timeout解決問題,但這是一個hack,它違背了我所代表的一切。 我變成了什么?

我的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')
};

我希望執行以下操作,但是問題是click回調會立即觸發。 如您所料,如果我跳至該字段,則不會調用click回調。 但是,如果焦點事件是通過單擊觸發的, hideHistory調用hideHistory

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

我嘗試調用e.stopPropagation()e.stopImmediatePropagation()但這些解決方案均無效。

您是否嘗試過e.preventDefault();

無論如何,您可以提供一個小提琴來確切說明正在發生的事情?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM