【问题标题】:Detect if element has focus in Angular2检测元素是否在Angular2中具有焦点
【发布时间】:2017-05-10 11:17:32
【问题描述】:

我在输入上使用 (focus)="showSearchList=true" 显示文本输入的自动完成下拉菜单,并使用 (blur)="showSearchList=false" 再次隐藏它。

我的问题是,如果单击下拉列表中的一个结果我想触发另一种方法,但是通过单击下拉列表中的元素我触发了输入的模糊方法,因此下拉结果不会被单击.完成这项工作的最佳方法是什么?我使用的是 ES6,而不是 Typescript,并且正在努力在 Google 上找到任何东西。

这是我目前拥有的模板:

<div id="searchContainer">
    <input [(ngModel)]="search"
           (ngModelChange)="filterSearch()"
           (focus)="showSearchList=true;"
           (blur)="showSearchList=false"
           type="text"
           id="searchJobs"
           placeholder=" Search"/>
    <div *ngIf="showSearchList"
         id="searchDropdown">
        <p *ngFor="let result of filteredSearchResults; let index = index;"
            (click)="addResultToResults(index); search='';">
            {{result}}
        </p>
    </div>
</div>

我认为不是在模糊时将 showSearchList 设置为 false,而是调用一个方法来检查哪个元素具有焦点,并根据该方法隐藏下拉列表,或者运行我的 addResultToResults 方法然后隐藏下拉列表,但我有不知道如何检查 angular2 中哪个元素具有焦点。

希望对此有一些反馈!

【问题讨论】:

    标签: angular ecmascript-6


    【解决方案1】:

    我建议使用mouseleave 事件来控制searchlist 并从input 元素中移动blur 事件。而如果想在searchlist中点击item后显示,可以结合click事件。

    Plunker demo.

    【讨论】:

    • 谢谢,但要让这个工作,用户必须先将鼠标放在下拉菜单上,不是吗?因此,如果他们决定不点击任何结果,下拉菜单会一直保留在那里,直到他们将鼠标移到下拉菜单上并退出。
    • 啊,没关系 - 我将 mouseleave 移到容器 div 中,它运行良好 - 谢谢! :)
    • @user3640967 哈哈,不客气。我只是在评论,但我认为没有必要。
    • 抱歉,我以为我已经接受了。现在会做。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 2015-08-17
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    相关资源
    最近更新 更多