Javascript 角度:如何获得<;李>;而不是<;ul>;从单击事件
我有一个角度组件,它有一个Javascript 角度:如何获得<;李>;而不是<;ul>;从单击事件,javascript,html,css,angular,Javascript,Html,Css,Angular,我有一个角度组件,它有一个元素,包含元素。我有以下代码: @HostListener('document:mousedown', ['$event']) onMouseDown(event: MouseEvent): void { func(); } 我希望在单击屏幕上的任何位置时执行func(),但某些元素除外,这些元素应用了禁用的类。我所希望的是,event.target将返回我单击的,这样我就可以执行类似的操作 if (!event.target.disabled)
元素,包含
元素。我有以下代码:
@HostListener('document:mousedown', ['$event'])
onMouseDown(event: MouseEvent): void {
func();
}
我希望在单击屏幕上的任何位置时执行func()
,但某些
元素除外,这些元素应用了禁用的类。我所希望的是,event.target
将返回我单击的
,这样我就可以执行类似的操作
if (!event.target.disabled) {
func()
}
问题是事件。target
返回
,而不是
。这是我的模板:
<div>
<ul>
<ng-container>
<ng-template>
<li>
<li class="disabled">
<li>
</ng-template>
</ng-container>
</ul>
</div>
-
-
-
此模板无法更改,因为它是其他人代码的一部分
有人知道怎么做吗?你能试试这个方法吗:
一个简单的解决方案是将这些禁用的元素绑定到mousedown事件,并调用event.stopPropagation()
方法
模板
演示您可以共享组件的模板吗?看到这将有助于解决问题answer@SergeyRudenko我已经更新了我的帖子。哦,好吧,我看到问题是li元素在shadow dom中?我对shadow dom不太了解:)你能提供更多细节吗?我想你还需要检查元素是否为li,否则func将无法在任何元素上工作已禁用类同意,我认为这也取决于用例,可能需要更多的检查:)你是对的,我仍然询问关于这个问题的更多细节,但我们提供了RNdev给出的答案,做得好,感谢演示。我发现它与我的应用程序之间的区别在于,我的HostListener keydown listener在handler()启动之前首先启动。HostListener关闭元素,因此handler()没有机会触发。如果我在HostListener上使用300秒执行“setTimeOut()”,HostListener将延迟足够长的时间才能工作,但如果少于200秒,它将失败。关于如何处理这个问题有什么想法吗?我完全迷路了。你没有在问题@RNdev中说明这一点。我已经用指令更新了答案。如果这对你不起作用,你可以用更多细节来澄清你的问题,这样我们可以帮你
@HostListener('document:click', ['$event'])
onMouseDown(event): void {
this.func(event.target)
}
func(element) {
if (element.tagName == ‘LI’ && element.classList.contains('disabled')) {
console.log("clicked disabled li")
} else {
console.log("clicked elsewhere")
}
}
<li class="disabled" (mousedown)="handler($event)">click</li>
handler(e:MouseEvent){
e.stopPropagation();
}