Tout d'abord, en appuyant sur Entrée à l'intérieur d'un textarea ne pas soumettre le formulaire, sauf si vous avez un script pour faire cela. C'est le comportement de l'utilisateur attend et je le recommande à l'égard du changement. Toutefois, si vous devez le faire, l'approche la plus simple serait de trouver le script qui fait Entrer soumettre le formulaire et de le modifier. Le code va avoir quelque chose comme
if (evt.keyCode == 13) {
form.submit();
}
... et vous pourriez passer à la
if (evt.keyCode == 13 && !evt.shiftKey) {
form.submit();
}
Si vous n'avez pas accès à ce code pour une raison quelconque, vous devez faire ce qui suit pour le faire fonctionner dans tous les principaux navigateurs, même si le curseur n'est pas à la fin du texte:
jsFiddle: http://jsfiddle.net/zd3gA/1/
Code:
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);