Typescript键盘侦听器阻止键入HTML输入表单

时间:2017-01-22 23:16:49

标签: javascript typescript keyboard

我正在使用Angular2开发一个Web应用程序,其中一个组件需要听键盘以检查是否有&#39; D&#39;键是按下的。这样做很好,除了它阻止我输入驻留在另一个组件中的HTML <input>。我猜测它是由键盘监听器类中的某些代码引起的,但我不知道在哪里。

以下是整个听众课程:

export class Keyboard {

    private keyboard_d;

    constructor(){
        this.keyboard_d = Keyboard.keyboard(68);
    }

    static keyboard(keyCode){
        var key = {
            code: keyCode,
            isDown: false,
            isUp: true,
            press: undefined,
            release: undefined,
            downHandler: function(event){
                if (event.keyCode === key.code) {
                    if (key.isUp && key.press) key.press();
                    key.isDown = true;
                    key.isUp = false;
                }
                event.preventDefault();
            },
            upHandler: function(event) {
                if (event.keyCode === key.code) {
                    if (key.isDown && key.release) key.release();
                        key.isDown = false;
                        key.isUp = true;
                    }
                    event.preventDefault();
                }
            }

        //Attach event listeners...
        window.addEventListener(
            "keydown", key.downHandler.bind(key), false
        );
        window.addEventListener(
            "keyup", key.upHandler.bind(key), false
        );
        return key;
    }

    //Returns true if the D key is pressed down, false if it is not.
    public isDpressed(){
        return this.keyboard_d.isDown;
    }
}

此类在Angular2组件中使用,如下所示:

var keyboard_listener = new Keyboard(); //create
var dPressed : boolean = keyboard_listener.isDPressed();

此代码中的哪个部分阻止我输入HTML输入表单?

注意我故意遗漏了两个相关组件的角度代码,因为如果我不需要,我不想添加angular2标签,我的直觉说上面的代码是问题。但如果认为有必要,我会编辑帖子并添加角度代码和标记。

1 个答案:

答案 0 :(得分:1)

event.preventDefault 的调用会停止该事件的默认行为,因此该字符不会显示在输入字段中。