【发布时间】:2018-01-04 12:46:56
【问题描述】:
我有一个在 <input type="text" /> 元素上实现的自定义指令:
<form #testForm="ngForm" (ngSubmit)="submit()">
<input type="text" name="testInput" testDirective />
<button type="submit">Submit</button>
</form>
指令在keyup 事件上有一个HostListener:
@Directive({
selector: '[testDirective]'
})
export class TestDirective {
@HostListener('keyup', ['$event'])
onkeyup(event: any)
{
// Do stuff
if (event.keyCode == 13) { // 13 = enter
event.stopPropagation();
return false;
}
}
}
如您所见,我根据其他问题的建议使用了event.stopPropogation() 和return false,但这不起作用,并且当按下回车键时表单仍在提交中。
但是,如果我将(keydown.enter)="$event.preventDefault()" 放在输入元素本身上,它会产生预期的效果并阻止表单提交。
<input type="text" name="testInput" testDirective (keydown.enter)="$event.preventDefault()" />
这种方法对我来说并不是特别理想,因为我想以编程方式控制何时按下回车键禁用表单提交。
有没有人知道为什么 stopPropagation() / return false 方法在这种情况下不起作用?
【问题讨论】:
标签: javascript angular typescript angular2-directives