动态添加输入框文本

Adding enter in inputarea text dynamically

我有一个脚本,我想在按下 shift+enter 时添加 Return,单次 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 时添加回车,如果他按正常回车,它工作正常并发送短信。我正在使用 rails 和套接字向用户发送聊天消息。

Uncaught TypeError: Cannot read property 'substring' of undefined

此错误意味着您正在对不存在的变量调用函数 substring。在您的情况下,它是 else 语句中的变量 content 。确保此变量存在并且可以在该函数的范围内访问。

[编辑]

既然您已经更新了代码并将变量 values 更改为 content,我不相信您会遇到同样的错误。请检查您的代码并更新问题以反映应用程序的实际状态。

  var content = $(this).serializeArray();
  var caret = getCaret($(this));
  this.value = content.substring(0, caret - 1) + "\n" + content.substring(caret, content.length);

要获取触发事件的文本区域的值,请使用 this.value(就像您在我引用的第三行中所做的那样)。

serializeArray() 用于创建一个包含表单中所有数据的数组。它不会 return 一个字符串,所以你的 return 值不会有 substring 方法。

问题是我正在使用 .new_message 表单选择器,虽然它正在获取价值,但它现在允许我使用 substring 方法。现在我已经通过向 message_box 添加另一个 id 并将代码更改为以下内容来进行更改。

$(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 并且它是开始的,所以现在我删除了第二个条件并且它工作得很好。 感谢您的支持。