当前位置: 首页 > 知识库问答 >
问题:

Angular2如果单击离开,是否可以滚动我自己的下拉隐藏?

诸葛亮
2023-03-14

我有一个div,我想在输入的聚焦/模糊上显示/隐藏它。以下是我尝试的简化版本:

<input (focus)="ShowDropDown=true;" (blur)="ShowDropDown=false;" />
<div *ngIf="ShowDropDown">
  <ul>
    <li (click)="...">...</li>
    <li (click)="...">...</li>
    <li (click)="...">...</li>
  </ul>
</div>

div包含要单击的元素列表。我的问题是,输入的模糊在li单击之前发生。

我想让事情保持简单。我不想设置所有内容的焦点,也不想单击事件来设置ShowDropDown=false,但我需要保持下拉div打开以进行交互。

我可以让ShowDropDown成为一个数字,其中聚焦加1,在div上移动鼠标再加1,模糊输入减去1,在div上移动鼠标减去1,但我认为这很容易失去同步。

有没有更简单的方法?单击后可以强制运行模糊吗?


共有3个答案

马绪
2023-03-14

我能想到这样一个简单的黑客

 <input (focus)="ShowDropDown=true;" (blur)="ShowDropDown=false;" />
 <div *ngIf="ShowDropDown">
   <ul>
     <li (click)="...; ShowDropDown = true">...</li>
     <li (click)="...; ShowDropDown = true">...</li>
     <li (click)="...; ShowDropDown = true">...</li>
   </ul>
 </div>

不是最优雅的解决方案,但应该有效

牛骞仕
2023-03-14

使现代化

听全球事件的更好方法是

@Comonent({...
  host: {'(window:click)': 'clickHandler()'}
})

起初的

只要检查点击是在你的下拉列表里面还是外面:

import {DOM} from angular2/platform/common_dom;

constructor(private elementRef: ElementRef) {
  DOM.getGlobalEventTarget('window')
     .addEventListener('click', (event) => {
       // check if event.target is a child of elementRef.nativeElement
       // if not hide the dialog
     });
}

我目前无法在TS中执行此操作,尽管DOM始终未定义。
这在Dart中工作正常。
Plunker

我制造了一个问题https://github.com/angular/angular/issues/6904

司马振国
2023-03-14

我在这个问题中找到了答案:鼠标下移将发生在模糊之前,而单击将发生在模糊之后。我只是换成

<input (focus)="ShowDropDown=true;" (blur)="ShowDropDown=false;" />
<div *ngIf="ShowDropDown">
  <ul>
    <li (mousedown)="...">...</li>
    <li (mousedown)="...">...</li>
    <li (mousedown)="...">...</li>
  </ul>
</div>

这为我提供了所需的事件顺序,而无需在鼠标所在的位置进行延迟或“引用计数”,也无需向DOM中的所有其他内容添加单击事件。

 类似资料:
  • 问题内容: 如果HTML元素样式的属性设置为,它是否仍可单击? 当该属性设置为时,该元素甚至都不是DOM树的一部分,因此这不是问题。但是我想知道一个元素是否仍然响应鼠标事件。 问题答案: 随着它 是 仍然DOM的一部分。只是没有在视口中渲染。 至于点击元素,则 不会 触发事件。

  • 问题内容: 我希望能够滚动浏览整个页面,但不显示滚动条。 在谷歌浏览器中: 但是Mozilla Firefox和Internet Explorer似乎无法正常工作。 我也在CSS中尝试过: 那确实隐藏了滚动条,但我不能再滚动了。 有什么办法可以删除滚动条,同时仍然可以滚动整个页面? 请仅使用CSS或HTML。 问题答案: 只是测试工作正常。 JavaScript: 由于滚动条的宽度在不同的浏览器中

  • 我希望能够滚动通过整个页面,但没有滚动条显示。 在Google Chrome中是: 但Mozilla Firefox和Internet Explorer似乎不是这样工作的。 我也在CSS中尝试过这个: 这确实隐藏了滚动条,但我不能再滚动了。 有没有一种方法,我可以删除滚动条,同时仍然能够滚动整个页面? 请使用CSS或HTML。

  • 问题内容: 我想运行自己的内部pypi服务器,以便在组织内分发鸡蛋。 我发现了一些项目,例如: http://pypi.python.org/pypi/EggBasket/ http://plone.org/products/plonesoftwarecenter 据我了解,pypi.python.org使用名为Cheese Shop的软件。 我的问题: 为什么我不能使用奶酪店本身?(我找不到它,

  • 有没有办法隐藏滚动条,仍然可以使用鼠标或方向键向上滚动? 有人能帮忙吗?

  • 我想打印我的html页面到一个PDF文件,但不想滚动条显示在那里的PDF文件。和我的页面有一个可滚动的主体,所以如果我设置如下: 在最终的pdf文件中,正文将是不完整的。那么,如果有一种方法,只是阻止滚动条显示,但内容仍然是可滚动的?