提问人:janci 提问时间:10/6/2023 最后编辑:janci 更新时间:10/6/2023 访问量:78
事件“selectstart”在“input”字段上不起作用
Event `selectstart` is not working on `input` field
问:
我对角度指令有疑问。我在stackblitz Project上准备了一个简单的项目。
基本上,我注意到HTML控件接收事件但从不接收事件。
同样,控件接收事件,但从不接收事件。
您可以通过查看我的调试日志输出或在调试器中设置断点来检查它。input
select
selectstart
label
selectstart
select
这是设计使然还是角度上的错误?
(仅包含事件处理程序)并如下所示:Directive
html template
指令:
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>
答:
1赞
Kaiido
#1
这是意料之中的,selectstart 属于 Selection API,它涉及“通常”的 DOM 节点,而 select 仅适用于输入表单元素 (, )。不幸的是,它们是独立且相互排斥的 API。<input>
<textarea>
评论
0赞
janci
10/6/2023
谢谢你的回答。我尝试使用 in 元素来禁用选择(只是我的要求) - 所以这行不通,不是吗?selectstart
input
0赞
Kaiido
10/6/2023
这将是它自己的问题,但不是你想要的问题,而是尝试哪个,因为在Firefox之外的其他地方没有很好的支持输入,所以我们需要一些恶作剧来做你想做的事(如果我理解正确的话):jsfiddle.net/yrd8stebselectstart
selectionchange
0赞
Afzal K.
10/6/2023
@janci尝试使用指针事件 none
0赞
Afzal K.
10/6/2023
或使用指令将输入值绑定到组件中的变量ngModel
1赞
janci
10/6/2023
@Kaiido 是的。它的工作方式与你一样 - 我已附加到文档中。我的解决方案现在是位混合 - 一些实现是在 angular 指令中完成的,一些位是在组件本身中完成的 - 但它有效。谢谢。selectionchange
评论
[<>]