Легке та елегантне рішення:
По-перше, натискання Enterвсередині текстової області не подає форму, якщо у вас є сценарій, щоб зробити це. Це поведінка, яку очікує користувач, і я рекомендую не змінювати її. Однак якщо вам це потрібно зробити, найпростішим підходом було б знайти сценарій, який змушує Enterподати форму та змінити її. Код матиме щось подібне
if (evt.keyCode == 13) {
form.submit();
}
... і ви могли просто змінити це
if (evt.keyCode == 13 && !evt.shiftKey) {
form.submit();
}
З іншого боку, якщо ви з якоїсь причини не маєте доступу до цього коду, вам потрібно зробити наступне, щоб він працював у всіх основних браузерах, навіть якщо карета не в кінці тексту:
jsFiddle: http://jsfiddle.net/zd3gA/1/
Код:
function pasteIntoInput(el, text) {
el.focus();
if (typeof el.selectionStart == "number"
&& typeof el.selectionEnd == "number") {
var val = el.value;
var selStart = el.selectionStart;
el.value = val.slice(0, selStart) + text + val.slice(el.selectionEnd);
el.selectionEnd = el.selectionStart = selStart + text.length;
} else if (typeof document.selection != "undefined") {
var textRange = document.selection.createRange();
textRange.text = text;
textRange.collapse(false);
textRange.select();
}
}
function handleEnter(evt) {
if (evt.keyCode == 13 && evt.shiftKey) {
if (evt.type == "keypress") {
pasteIntoInput(this, "\n");
}
evt.preventDefault();
}
}
// Handle both keydown and keypress for Opera, which only allows default
// key action to be suppressed in keypress
$("#your_textarea_id").keydown(handleEnter).keypress(handleEnter);