Bootstrap

vue3 输入框禁止输入表情

vue3 输入框禁止输入表情

经过长时间的项目经验积累和测试进行提出问题的总结 发现在项目中对于输入框可以输入表情这是比较另类的 因为一般情况下不会有人对其进行输入表情包,为了解决这个问题也查询了资料 网上有很多种进行处理方式 但是感觉好多比较繁琐不够简洁,最后还是找到了感觉不错的方法进行记录分享一下

代码片段

新建文件夹 emoji.js
const findEle = (parent, type) => {
  return parent.tagName.toLowerCase() === type ? parent : parent.querySelector(type)
}
const trigger = (el, type) => {
  // 给元素绑定事件
  const e = document.createEvent('HTMLEvents')
  e.initEvent(type, true, true)
  el.dispatchEvent(e)
}

const emoji = {
  mounted(el) {
    // 指令第一次绑定到元素时调用
    // 判断是否是emoji图标
    const isEmoji = char => {
      // 表情都是2个字符
      return char.length > 1
    }
    const clearEmoji = str => {
      // emoji图标都替换成空字符串‘’
      return Array.from(str).filter(c => !isEmoji(c)).join('')
    }
    const eleInput = findEle(el, 'input') || findEle(el, 'textarea')
    // 判断绑定元素是否是input输入框或者富文本输入框
    el.$inp = eleInput
    eleInput.handle = function() {
      const val = eleInput.value
      eleInput.value = clearEmoji(val)
      // 监听输入框的emoji图标转换成空
      trigger(eleInput, 'input')
    }
    eleInput.addEventListener('keyup', eleInput.handle)
    // el添加键盘监听事件keyup
    eleInput.addEventListener('blur', eleInput.handle)
    // el添加键盘失焦事件blur
    eleInput.addEventListener('change', eleInput.handle)
    // 监听改变事件 change
  }
}

export default emoji
在新建文件夹 index.js
import emoji from './emoji'

export default function directive(app) {
  app.directive('emoji', emoji)
}
在将新建的index.js文件进行引入到main.js进行注册全局
import directive from './index.js' // directive

directive(app)
使用就和设置的指令名称一样即可 v-emoji
 <input v-emoji >
 <el-input v-emoji >

只是经验分享 有好的建议可以提出来进行更改哦

;