preventDefault()也会禁用文本输入

时间:2018-06-24 21:30:15

标签: javascript html5 preventdefault

编辑:我想在输入一些文本后使用Enter键清除文本框。对不起,我造成的混乱

编辑2 缺少事件参数是所有这些的关键。抱歉,我作为程序员失败。

我想在按Enter时禁用新行/换行符。但是,版本1不起作用,因为我根本无法输入任何文本。

第2版有效,在继续输入新文本的同时,我仍然可以清除该字段。

根据我的解释,无论我按下Shift键+还是不一起输入,它仍然应该允许我键入。为什么会有这样的差异? Shift键的默认选项与启用/禁用文本框上的输入有何关系?我想做的就是在按Enter键时仅禁用新行/换行符,但我发现它也禁用了输入部分,据我所知,这不应该吗?

// html
<textarea type="text" id="box">Some text</textarea>

// javascript
document.getElementById('box').addEventListener('keypress', (e)=>{
   //version 1
   if(e.keyCode == 13){ //why does this version also disable any text input?
      e.preventDefault();
      document.getElementById('box').value = '';
   }

   //version 2
   if(e.keyCode == 13 && e.shiftKey){
      e.preventDefault();
      document.getElementById('box').value = '';
   }
});

1 个答案:

答案 0 :(得分:2)

您的代码抛出错误,因为它不知道变量e指的是什么。如果您观看错误控制台,则应该看到该错误。要修复它,您应该将其传递给函数。当您按Enter键时,这将清除教科书。那是你要的吗?我把这行留了下来,但注释掉了。

document.getElementById('box').addEventListener('keypress', (e)=>{
   //version 1
   if(e.keyCode == 13){ //why does this version also disable any text input?
      e.preventDefault();
      document.getElementById('box').value = '';
   }

});
<textarea type="text" id="box">Some text</textarea>