阻止制表符的默认行为会阻止侦听器工作

时间:2017-08-20 07:36:37

标签: javascript

我目前正在尝试动态创建输入字段并实现标签自动完成功能。不幸的是,每当我听一个标签并在keydown事件上调用preventDefault来阻止标签关注其他字段时,按键监听器就无法注册标签。

var element = document.createElement("input");


//Assign different attributes to the element.
element.setAttribute("type", "text");
element.setAttribute("value", "");
element.setAttribute("name", "Test Name");
element.setAttribute("spellcheck", "false");
element.setAttribute("style", "width:400px");
element.classList.add('text');


element.onkeydown = function(e) {
    if(e.keyCode == 9){
        e.preventDefault();
    }
}

element.onkeypress = function(e) {
    if (!e) e = window.event;
    var keyCode = e.keyCode || e.which;
    if (keyCode == 13){
        // code
    } else if(keyCode == 9) {
        console.log("detected"); //never printed to console
    } 

}

如何在添加自己的功能的同时阻止标签执行默认行为?

1 个答案:

答案 0 :(得分:0)

Keydress在keydown之后被解雇,并且由于你阻止了keydown中的默认行为,我认为它可以防止keypress事件被触发。你应该尝试将它放在同一个事件处理程序中,或者处理同一事件的处理程序,但这可能很棘手,因为没有什么能保证它执行的顺序。