Добавление ввода в текст inputarea динамически - PullRequest
0 голосов
/ 09 января 2020

У меня есть один скрипт, в который я хочу добавить Return при нажатии shift + enter, он отлично работает с одним Enter, но не добавляет shift + Enter с \n из-за ошибки javascript не выбирает точное содержание. Я получаю следующую ошибку

Uncaught TypeError: Cannot read property 'substring' of undefined
    at HTMLFormElement.<anonymous> (86:206)
    at HTMLFormElement.dispatch (jquery.self-bd7ddd393353a8d2480a622e80342adf488fb6006d667e8b42e4c0073393abee.js?body=1:5227)
    at HTMLFormElement.elemData.handle (jquery.self-bd7ddd393353a8d2480a622e80342adf488fb6006d667e8b42e4c0073393abee.js?body=1:4879)

Вот мои коды

$(document).ready(function(){
  $('.new_message').keyup(function (event) {
  if (event.keyCode === 13 && !event.shiftKey) {
    event.preventDefault();
      var values = $(this).serializeArray();
      App.conversation.speak(values);
      $(this).trigger('reset');
  } else {
    if(event.keyCode === 13 && event.shiftKey){
      var content = $(this).serializeArray();
      var caret = getCaret($(this));
      this.value = content.substring(0, caret - 1) + "\n" + content.substring(caret, content.length);
    }
  }
  });
});

Я просто хочу добавить ввод, когда пользователь нажимает Shift + Enter, и если он нажимает обычный ввод, он работает нормально и отправив текстовое сообщение. Я использую рельсы с сокетом для отправки сообщений чата пользователю.

Ответы [ 3 ]

0 голосов
/ 09 января 2020
  var content = $(this).serializeArray();
  var caret = getCaret($(this));
  this.value = content.substring(0, caret - 1) + "\n" + content.substring(caret, content.length);

Чтобы получить значение текстовой области, на которую запускается событие, используйте this.value (так же, как вы делаете это в третьей строке, которую я цитировал).

serializeArray() - для создания массива, содержащего все данные в форме. Он не вернет строку, поэтому возвращаемое значение не будет иметь метода substring.

0 голосов
/ 09 января 2020

Проблема заключалась в том, что я использую селектор формы .new_message, хотя он получает значение, но теперь он позволяет мне использовать метод подстроки. Теперь я изменился, добавив еще один идентификатор в message_box и изменив код на следующий.

$(document).ready(function(){
  $('.new_message').on('keyup', function(event) {
  if (event.keyCode === 13 && !event.shiftKey) {
    event.preventDefault();
      var values = $(this).serializeArray();
      App.conversation.speak(values);
      $(this).trigger('reset');
  } else {
    if(event.keyCode === 13 && event.shiftKey){
      var content = $('#message_box').val()
      var caret = getCaret(this);
      $('#message_box').val( content.substring(0, caret - 1) + "\n" + content.substring(caret, content.length) );
    }
  }
  });
});

Это сработало, но я заметил, что добавляло два Returns и оно начиналось, поэтому теперь я удалил второе условие и оно работает отлично. Спасибо за вашу поддержку.

0 голосов
/ 09 января 2020
Uncaught TypeError: Cannot read property 'substring' of undefined

Эта ошибка означает, что вы вызываете функцию substring для переменной, которая не существует. В вашем случае это переменная content в операторе else. Убедитесь, что эта переменная существует и доступна в рамках этой функции.

[Редактировать]

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

...