Как я могу реализовать немедленную отправку текста при нажатии клавиши ввода в текстовой области? - PullRequest
0 голосов
/ 26 апреля 2009

Дубликат:

Отправка данных из textarea, нажав «Enter».


У меня есть текстовая область и кнопка отправки:

<textarea id="chat"></textarea>
<input type="submit" value="Submit" onclick="send_msg();">

Значение texarea передается при нажатии Enter:

    textarea.onkeyup = function(e) {
        alert(e.keyCode);
        e = e || window.event;
        if (e.keyCode === 13) {
            send_msg();
        }
        return true;
    }

Проблема заключается в том, чтобы текстовая область передала свое значение, прежде чем позволить курсору перейти на следующую строку. Как это можно сделать?

Ответы [ 3 ]

1 голос
/ 26 апреля 2009

Одна проблема, которая игнорируется, это пользователи, использующие метод ввода (редакторы) - например. нелатинский текстовый ввод. IME, с которым я знаком, - это IM Kotoeri Hiragana на OSX, но существует множество других для японского языка (один только Kotoeri имеет несколько различных режимов ввода, и есть по крайней мере еще один основной, называемый ATOK), в дополнение к режимам для hangul, традиционный и упрощенный китайский, а также множество других менее известных языков. И эти методы ввода существуют на всех основных платформах (особенно Win, Mac и Linux).

Проблема, которую они представляют с точки зрения кода, аналогичного тому, что вы пытаетесь сделать, заключается в том, что точные физические нажатия клавиш не обязательно соответствуют фактическим данным, вводимым пользователем.

Например, при наборе последовательности символов toukyou<enter> в хирагане по умолчанию будет получена строка とうきょう, обратите внимание, что в результирующем тексте нет <enter>, потому что ввод подтверждает составленный текст. Но в дополнение к этому фактическая последовательность символов, которая появляется, изменяется при вводе:

t // t
と // to
とう // tou
とうk // touk
とうky // touky
とうきょ // toukyo
とうきょう // toukyou

Если память используется, когда я реализовал это в webkit, необходимо было сделать keyCode равным 229 для keyDown для всех ключей, набранных в IME (для сравнения с IE) - но я не могу вспомнить, каково поведение keyUp.

Стоит также отметить, что в некоторых IME вы не обязательно будете получать нажатия клавиш, нажатия клавиш или нажатия клавиш. Или вы получите несколько. Или все они отправляются вместе в конце ввода.

В общем, это очень ... нечистая ... часть реализаций событий DOM в настоящее время.

1 голос
/ 20 апреля 2014

e.preventDefault(); Этот текст здесь, потому что переполнение стека настаивает на том, что нет полезного ответа с длиной менее 30 символов. Угадай, как я к этому отношусь?

1 голос
/ 26 апреля 2009

Хитрость заключается в том, чтобы остановить браузер от выполнения поведения по умолчанию при нажатии клавиши вниз и вверх. Чтобы сделать это, просто return false в обработчиках onkeypress / onkeyrelease, когда вы обнаружите код клавиши 13.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...