В настоящее время, если человек нажимает enterвнутри текстовой области, форма будет отправлена.
Хорошо, я этого хочу.
Но когда они набирают shift+ enter, я хочу, чтобы текстовая область переместилась на следующую строку:\n
Как я могу сделать это в JQuery
простом JavaScript или как можно проще?
javascript
jquery
html
css
TIMEX
источник
источник
e.shiftKey
.shiftKey
свойство события .Ответы:
Лучше использовать более простое решение:
Приведенное ниже решение Тима лучше, я предлагаю использовать это: https://stackoverflow.com/a/6015906/4031815
Мое решение
Я думаю, что вы можете сделать что-то вроде этого ..
РЕДАКТИРОВАТЬ: изменил код для работы независимо от положения каретки
Первая часть кода - получить позицию каретки.
Ссылка: Как получить позицию столбца каретки (не пикселей) в текстовой области, в символах, с самого начала?
И затем, заменяя значение textarea соответствующим образом, когда Shift+ Enterвместе, отправьте форму, если Enterнажата одна.
Вот демо
источник
event.keyCode == 13
), и я думаю, что вы также хотели,event.preventDefault()
а неevent.stopPropagation()
.event.stopPropagation()
я намеревался остановить какой-то другой код, который он, возможно, написал для отправки формы.event.stopPropagation()
, что позволит предотвратить событие из барботажных дальше вверх по DOM , но не будет мешать делать нажатие клавиши свое действие вставки разрыва строки по умолчанию (хотя на самом деле вkeyup
моем предложенииevent.preventDefault()
не будет делать что либо).carent
не определена, если я изменил его на каретный, он добавляет 2 новые строкиПростое и элегантное решение:
Во-первых, нажатие Enterвнутри текстовой области не отправляет форму, если у вас нет сценария, чтобы сделать это. Такое поведение ожидает пользователь, и я бы рекомендовал не менять его. Однако, если вы должны сделать это, самый простой подход - найти скрипт, который заставляет Enterотправить форму и изменить ее. Код будет иметь что-то вроде
... и вы можете просто изменить его на
С другой стороны, если по какой-то причине у вас нет доступа к этому коду, вам нужно сделать следующее, чтобы он работал во всех основных браузерах, даже если курсор не находится в конце текста:
jsFiddle: http://jsfiddle.net/zd3gA/1/
Код:
источник
Большинство из этих ответов усложняют это. Почему бы не попробовать это так?
Никаких проблем с положением каретки или разрывом линии толчка в JS. По сути, функция не будет работать, если нажата клавиша Shift, что позволяет клавише ввода / возврата выполнять свою обычную функцию.
источник
Почему не просто
источник
Используйте плагин горячих клавиш JQuery и этот код
источник
Вот решение AngularJS, использующее ng-keyup, если у кого-то есть такая же проблема с использованием AngularJS.
источник
Используя ReactJS ES6, вот самый простой способ
shift+ enterНовая Линия в любой позиции
enter блокированный
источник
Я нашел эту ветку в поисках способа управления Shift + любой клавишей. Я склеил вместе другие решения, чтобы сделать эту комбинированную функцию для достижения того, что мне нужно. Я надеюсь, что это помогает кому-то еще.
источник
В случае, если кто-то все еще задается вопросом, как это сделать без jQuery.
HTML
<textarea id="description"></textarea>
Javascript
Ваниль JS
источник
Я использую div, добавляя contenteditable true вместо использования textarea.
Надежда может помочь вам.
источник
Это работает для меня!
источник
используя
ng-keyup
директиву angularJS, только отправляете сообщение по нажатиюEnter
клавиши иShift+Enter
просто занимает новую строку.источник