Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度:如何获得<;李>;而不是<;ul>;从单击事件_Javascript_Html_Css_Angular - Fatal编程技术网

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();   
    }