You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular指令中input无selectstart事件、label无select事件问题咨询

关于Angular指令中select/selectstart事件的疑问

我在使用Angular指令时发现一个现象:HTML input 控件能接收select事件,但始终收不到selectstart事件;而label控件能接收selectstart事件,却收不到select事件。已通过调试日志和断点验证该现象,想知道这是Angular的设计如此,还是存在Bug?

相关代码

Directive

import { Directive, ElementRef, HostListener, Renderer2 } from '@angular/core';

@Directive({
  selector: '[appDateInput]',
})

export class DateInputDirective {
  constructor(private el: ElementRef, private renderer: Renderer2) {
    console.log("S:" + this.el.nativeElement.selectionStart
      + " E:" + this.el.nativeElement.selectionEnd
    );
  }

  @HostListener('selectstart', ['$event'])
  onSelectStart(event: KeyboardEvent): void {
    //event.preventDefault();
    console.log("onSelectStart called");
    console.log("S:" + this.el.nativeElement.selectionStart
      + " E:" + this.el.nativeElement.selectionEnd
    );
  }
  @HostListener('select', ['$event'])
  onSelect(event: KeyboardEvent): void {
    //event.preventDefault();
    console.log("onSelect called");
    console.log("S:" + this.el.nativeElement.selectionStart
      + " E:" + this.el.nativeElement.selectionEnd
    );
  }
  @HostListener('selectionchange', ['$event'])
  onSelectionChange(event: KeyboardEvent): void {
    //event.preventDefault();
    console.log("onSelectionChange called");
    console.log("S:" + this.el.nativeElement.selectionStart
      + " E:" + this.el.nativeElement.selectionEnd
    );
  }
}

HTML模板

<label appDateInput>Selection test</label>

<form>
  <label for="fname">First name:</label>
  <input type="text" id="fname" name="fname" appDateInput><br><br>
</form>

内容的提问来源于stack exchange,提问作者janci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:25:19