关于enter及ctrl_enter换行及发送切换问题

<textarea
  v-if="submitCommond === 'ctrl'"
  id="messgae_input"
  v-model="currentMessage"
  class="border-none"
  type="textarea"
  autofocus
  rows="7"
  :readonly="loading"
  placeholder="请输入内容"
  @keyup.ctrl.enter.exact="keyCtrlEnter($event)"
  @keyup.enter.exact="lineFeed($event,'enter')"
/>

keyCtrlEnter(event) {
  this.btnIsDisabled()
  this.setSubmitBtnDisabled()
  this.getSubmitBtnIsDisabled()
  // console.log('ctrl' + this.loading)
  if (this.submitCommond === 'ctrl' && !this.submitBtnDisabled && !this.loading && this.haveMessage) {
    this.loading = true
    this.submitNewMsg()
    event.preventDefault()
  }
},

  lineFeed(event, ctrl) {
  if (ctrl === 'enter') {
    return
  }
  // console.log('换行')
  // console.log(this.currentMessage)
  event.preventDefault()
  this.currentMessage = this.currentMessage + '\n'
},

1.不能使用el-textarea,无法设置exact,
而设置 @keyup.ctrl.enter.exact="keyCtrlEnter($event)"可以解决按 ctrl+enter仍然触发enter事件的问题。

2.textarea需要设置autofocus自动获取焦点,才能实现enter或ctrl+enter发送。

3.enter发送过程中,设置loading变量监听发送状态。
将变量赋给readonly属性来禁止发送时输入。注意:不能使用disable属性来禁止发送,disabled在发送后会自动失去焦点。必须要再次点击textarea才能再次获取到焦点,而readonly就不会发送后自动失去焦点。

4.textarea默认enter换行,所以在enter和ctrl+enter时,如果使用enter换行不需要再对数据设置n

在C语言中,如果你想要实现类似的功能,即当用户输入换行时,将当前输入的内容保存到数组并开始新的一行输入,你可以这样做: 首先,你需要创建一个动态大小的数组来存储用户的输入,并且每次读取一行后再决定是否需要增加数组的大小。以下是使用`fgets()`的一个示例: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define BUFFER_SIZE 100 // 初始缓冲区大小 char *user_input = malloc(BUFFER_SIZE); // 动态分配内存 size_t input_size = 0; void resize_buffer() { if (input_size + BUFFER_SIZE >= strlen(user_input)) { size_t new_size = input_size * 2; // 增加一倍空间,防止频繁扩容 user_input = realloc(user_input, new_size); if (!user_input) { fprintf(stderr, "Memory allocation failed.\n"); exit(1); } } } int main() { while (true) { printf("请输入一行数据,然后按Enter换行Ctrl+D退出):\n"); if (fgets(user_input + input_size, BUFFER_SIZE - input_size, stdin) == NULL) { if (feof(stdin)) { printf("用户已经结束输入。\n"); free(user_input); break; } else { perror("fgets failed"); continue; } } input_size += strlen(user_input + input_size); // 更新输入大小,包括换行符 resize_buffer(); // 如果超过当前缓冲区,扩大缓冲区 // 这里你可以处理每行的数据,比如分割成数组元素等 // 如需操作每一行,记得先删除行尾的换行符:user_input[input_size-1] = '\0'; } free(user_input); return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值