jQuery .добавить разрыв строки в текстовой области при нажатии return

#jquery

#jquery

Вопрос:

Мне нужно иметь возможность перейти к следующей строке после нажатия клавиши Enter (keycode == 13) после ввода некоторого текста. Это работает, если вы нажмете «Enter» перед вводом любого текста, но не после. Вот некоторые из моих сценариев

 var keyPressedOnContactUsMessageHandler = function (e) {
    if (e.which == 13 || e.keyCode == 13) {
        $(this).append(" nn");
        if ($("#ContactUsMessage").focus()) {
            return false;
        } else {
            return true;
        }
        sendMessage();
        blockEnterKeyHandler(e);
    }
};
  

Ответ №1:

Я думаю, проблема, вероятно, в том, что у вас есть textarea и вы пытаетесь добавить к нему содержимое append . Содержимое HTML textarea элемента имеет значение только при анализе страницы. После этого на содержащийся текст ссылается value свойство. Вместо этого вы должны изменить это.

 this.value  = 'nn';
  

Я предполагаю, что ваш браузер щедр: если вы измените HTML до value изменения, он value соответствующим образом изменит. Лучше просто изменить value самостоятельно.


Кроме того, $("#ContactUsMessage").focus() всегда будет возвращать истинное значение. Если вы пытаетесь проверить, сфокусирован ли элемент, используйте is :

 if ($('#ContactUsMessage').is(':focus')) {
  

Обратите внимание, что это не работает в старых браузерах, если вы используете версию jQuery до версии 1.6.

Ответ №2:

Кроме того, после того, как вы это исправите, этот раздел

 sendMessage();
blockEnterKeyHandler(e);
  

никогда не достигается, потому что вы всегда возвращаете что-то перед этим с помощью этого оператора if

 if($("#ContactUsMessage").focus()) {
      return false;
} else {
      return true;
}