element ui - el-input 实现点击插入关键词功能

element ui - el-input 实现点击插入关键词功能


前言

功能描述:

  • el-input文本框,通过点击下方关键词,在文本框中插入该词;
  • 光标移动到文本之间,再点击下方关键词,在光标的位置插入该词;
  • 插入关键词后,文本框获取焦点,并将光标的位置定位到关键词后点击按钮,在文本框指定位置插入该按钮的关键词。

效果:

在这里插入图片描述

思路

  • 给标签加上失去焦点事件 @blur=“handleInputBlur”
  • 获取光标位置;
  • 点击关键词时候,将文本内容从光标位置进行拆分,拼接关键词,设置焦点,处理光标位置。

代码

html部分:

<el-row>
	<el-col :span="24">
        <el-input
            ref="tipInput"
            type="textarea"
            placeholder="请输入内容"
            maxlength="1000"
            show-word-limit
            v-model="rowData['tip_content']"
            @blur="onInputBlur">
        </el-input>
     </el-col>
</el-row>

<el-row>
	<el-button :type="item.type" plain size="mini" v-for="(item,i) in btnList" :key="i"
                 @click="onTipBtnClick(item)">{{ item.name }}
    </el-button>
</el-row>

js部分:

data() {
	return {
      // 光标位置
      cursorIndex: '',
      // 按钮列表
      btnList: [{
        name: '举报时间',
        type: 'primary'
    }, {
        name: '被举报者昵称',
        type: 'primary'
    }, {
        name: '举报类型',
        type: 'primary'
    }, {
        name: '最终超时时间',
        type: 'primary'
    }, {
        name: '举报时间戳',
        type: 'primary'
    }, {
        name: '处罚类型',
        type: 'warning'
    }, {
        name: '处罚时长',
        type: 'warning'
    }, {
        name: '扣分分数',
        type: 'warning'
    }]
  }
},

methods: {
    // 获取文本框的光标位置
    onInputBlur(e) {
      this.cursorIndex = e.srcElement.selectionStart;
    },
	// 点击按钮插入关键词
    onTipBtnClick(item) {
      // 将文本内容在光标位置进行拆分
      let txt = this.rowData['tip_content'];
      let start = txt.substring(0, this.cursorIndex);
      let end = txt.substring(this.cursorIndex, txt.length);

      // 插入关键词
      this.rowData['tip_content'] = start + `${item.name}` + end;

      // 获取文本框,设置焦点,处理光标位置
      if (this.$refs[this.targetInputName]) {
        this.$refs[this.targetInputName].focus();
        this.$nextTick(() => {
          let input = this.$refs[this.targetInputName].$el.firstElementChild;
          input.focus();
          let addIndex = item.name.length;
          input.selectionStart = this.cursorIndex + addIndex;
          input.selectionEnd = this.cursorIndex + addIndex;
        });
      }
    },
}

总结

参考链接: 输入文本框实现点击插入词功能

Element-UI是一个流行的基于Vue.js的前端组件库,其中`el-input`是用于创建各种输入元素如文本、密码输入、搜索等的基本组件。如果在使用过程中遇到`el-input`组件失效的情况,可能有以下几个原因: 1. **未正确安装或引入**: 确保已正确安装Element UI并将其添加到项目中。如果是Vue项目,可以在`main.js`文件中导入并注册。 ```javascript import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI) ``` 2. **组件绑定错误**: 检查你的HTML模板中是否正确地使用了`v-model`指令来双向数据绑定,例如: ```html <el-input v-model="inputValue" placeholder="请输入内容"></el-input> ``` 确保`inputValue`是在Vue实例中的响应式数据。 3. **props配置问题**: 如果你自定义了一些属性传递给`el-input`,确认这些属性名和值设置无误。 4. **样式冲突**: 其他CSS样式可能会覆盖Element-UI的样式,检查是否有其他样式表干扰到了输入的显示。 5. **版本兼容性**: 确保使用的Element-UI版本与项目的Vue版本兼容,不匹配可能导致某些组件无法正常工作。 6. **浏览器兼容性问题**: 测试一下是否在所有预期的浏览器环境下都能正常显示,有些CSS特性可能在旧版浏览器中不受支持。 如果你已经排除了上述常见问题但依然遇到问题,可以尝试提供更具体的代码片段或描述问题出现的具体场景,这样我能更好地帮助你定位问题。接下来是一些相关问题:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值