要检测输入按我使用简单的解决方案:
if (e.keyCode == 13) {
// do something
}
在桌面上,它可以在任何地方正常工作在平板电脑上,智能手机 - 也是 - 但是,如果它来到textarea这不起作用。
由于最近的Chrome更新很少,因此成为一个问题。
因此,当您从移动设备按Enter键时,您只会看到新行“\ n”,但没有执行任何功能。
那么,如何在最新的chrome版本上检测移动设备上的textarea输入?
答案 0 :(得分:1)
虽然它可能是特定于Chrome的错误,但可能是某些可能的解决方案:
同时检查e.which
:
var key = e.which || e.keyCode || 0;
if (key == 13) {
// do something
}
尝试其他活动:例如如果您正在使用keyUp
,请尝试keyPress
如果仍然无法正常工作,则可能需要一种解决方法,如果检测很重要。您可以跟踪该值并检测一次" \ n"使用input
事件添加到textarea。
var textarea = document.getElementById('your-textarea');
var textareaValue = textarea.value;
var textareaLines = getLines(textareaValue);
function getLines(str) {
// This uses RegEx to match new lines.
// We use || [] because it would otherwise fail if there weren't
// any line breaks yet.
return (str.match(/[\n\r]/g) || []).length;
}
textarea.addEventListener('input', function() {
var newValue = textarea.value;
var newLines = getLines(newValue);
if (newLines > textareaLines
&& newValue.length == textareaValue.length + 1) {
// We also check that the new length is only one
// character longer to not fire this new line event
// after a copy-paste with a new line character.
doSomething();
}
textareaValue = newValue;
textareaLines = newLines;
}, false);
答案 1 :(得分:1)
如果你像我一样使用 React,onKeyPress={e => e.key}
可以工作。
e.key
在浏览器和移动设备上返回“Enter”
e.code
仅在浏览器上返回“Enter”