[英]textarea control - custom behavior enter/ctrl+enter
我有以下简单的<textarea>
<textarea id="streamWriter" rows="1" cols="20" placeholder="Writer"></textarea>
我还有以下 jQuery/JavaScript 代码块:
$('textarea#streamWriter').keydown(function (e) {
if (e.keyCode == 13) {
if (e.ctrlKey) {
alert('ctrl enter - go down a line as normal return would');
return true;
}
e.preventDefault();
alert('submit - not your default behavior');
}
});
我试图强制不要在正常返回键下创建新的换行符。 但如果 Ctrl+Enter 被输入,我想要这种行为。
这确实检测到差异,但并没有强迫我需要的行为。 如果您使用过 Windows Live Messenger,我需要相同的文本框行为。 Enter 提交(在我的情况下,我将调用一个函数,但阻止 textarea 下一行)和 Ctrl+Enter 下一行。
解决方案? 谢谢。
$('textarea#streamWriter').keydown(function (e) {
if (e.keyCode == 13) {
if (e.ctrlKey) {
//emulate enter press with a line break here.
return true;
}
e.preventDefault();
$('div#writerGadgets input[type=button]').click();
}
});
以上做了我正在尝试做的事情。 只有部分可以模拟带有换行符的 enter press。 如果你知道,请告诉我如何做到这一点。
使用keypress
代替keydown
效果会好一点,但不能与Ctrl键一起使用; 我切换到shift键 - jsfiddle 。
编辑:据我所知,您将无法在跨浏览器中始终使用 Ctrl 键,因为浏览器将其用于自己的快捷方式。
使用 alt 键会遇到相同的情况。
再次编辑:我有一个适用于Ctrl键的解决方案 - jsfiddle 。
$('textarea#streamWriter').keydown(function (e) {
if (e.keyCode === 13 && e.ctrlKey) {
//console.log("enterKeyDown+ctrl");
$(this).val(function(i,val){
return val + "\n";
});
}
}).keypress(function(e){
if (e.keyCode === 13 && !e.ctrlKey) {
alert('submit');
return false;
}
});
编辑:这不是 100% 有效,只有当您不在文本中间时才有效。 必须想办法让代码在中间的文本上工作。
顺便说一句……你为什么要这样做? 如果用户在他们准备好之前按下Enter以创建一个新行并突然提交表单,这会不会让用户感到困惑?
清除VanillaJS :
document.querySelector('#streamWriter').addEventListener('keydown', function (e) {
if (e.keyCode === 13) {
// Ctrl + Enter
if(e.ctrlKey) {
console.log('ctrl+enter');
// Enter
} else {
console.log('enter');
}
}
});
Kevin B 的解决方案适用于 Mac,但不适用于 Windows。
在 Windows 上,当按下ctrl + enter时,keyCode 是 10 而不是 13。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.