javascript - Angular2 阻止在指令中按下回车键时提交表单

标签 javascript angular typescript angular2-directives

我有一个在 <input type="text" /> 上实现的自定义指令元素:

<form #testForm="ngForm" (ngSubmit)="submit()">
    <input type="text" name="testInput" testDirective />
    <button type="submit">Submit</button>
</form>

该指令有一个 HostListenerkeyup 上事件:

@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方法在这种情况下不起作用?

最佳答案

错误只是一个按键错误:

@Directive({
  selector: '[testDirective]'
})
export class TestDirectiveDirective {
  @HostListener('keydown', ['$event']) //keydown, not keyup
  onKeyDown(event: any) {
    // Do stuff
    if (event.keyCode === 13) { // 13 = enter
      return false;
    }
  }
}

顺便说一句,stopPropagation 在这种情况下也是不必要的,至少从我的(公认的有限)测试来看是这样。 YMMV

关于javascript - Angular2 阻止在指令中按下回车键时提交表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48095665/

相关文章:

javascript - 使用服务器端渲染与外部 URL 进行数据绑定(bind)

javascript - 无法订阅 Aurelia 中的路由器事件(TypeScript)

javascript - 生成 YouTube 自定义播放列表问题

javascript - 如何解决createSelector方法 Uncaught Error ?

javascript - 提交表单 onload 不起作用

css - Angular - 覆盖 swimlane/ngx-datatable 的 CSS

javascript - JS,数组矩阵和forEach行为的区别

javascript - Angular 2+ 窗口属性未定义

javascript - 用于检测和替换 undefined object 属性的全局函数/服务 | Angular 2-TS

typescript - 错误 TS2339 : Property 'addEnvironment' does not exist on type 'IFunction' Typescript aws-cdk