自定义vue指令

该代码段展示了如何在Vue应用中创建两个自定义指令:v-focus用于元素聚焦,v-trim用于过滤输入的前后空格。这两个指令利用jQuery选择器找到input元素,并在特定事件(如聚焦、键盘按键或失去焦点)时进行操作。
摘要由CSDN通过智能技术生成

directive.js
引入jquery

function getInput(el) {
  let inputEle
  if (el.tagName !== 'INPUT') {
    inputEle = el.querySelector('input')
  } else {
    inputEle = el
  }
  return inputEle
}
function dispatchEvent(el, type) {
  const evt = document.createEvent('HTMLEvents')
  evt.initEvent(type, true, true)
  el.dispatchEvent(evt)
}
// 聚焦指令 v-focus
const focus = (app) => {
  app.directive('focus', {
    mounted(el) {
      const children = $(el).find('input')[0]
    //   $(children)[0].autofocus = true;
    //   console.log($(children),"$(children)")
      $(children).focus()
    }
  })
}
// 过滤前后空格的指令 v-trim
const trim = (app) => {
  app.directive('trim', {
    mounted(el) {
      const inputEle = getInput(el)
      const handler = function(event) {
        const newVal = event.target.value.trim()
        if (event.target.value !== newVal) {
          event.target.value = newVal
          dispatchEvent(inputEle, 'input')
        }
      }
      // 回车后过滤空格(因为输入框可以回车调接口查询,所以这时候单纯的失去焦点过滤不起作用,要对回车键单独做一下处理)
      const keydown = function(event) {
        if (event.keyCode === 13) {
          const newVal = event.target.value.trim()
          if (event.target.value !== newVal) {
            event.target.value = newVal
            dispatchEvent(inputEle, 'input')
          }
        }
      }
      el.inputEle = inputEle
      el._blurHandler = handler
      el._keyHandler = keydown
      inputEle.addEventListener('blur', handler)
      inputEle.addEventListener('keydown', keydown)
    },
    unmounted(el) {
      const { inputEle } = el
      inputEle.removeEventListener('blur', el._blurHandler)
      inputEle.removeEventListener('keydown', el._keyHandler)
    }
  })
}
export default (app) => {
  focus(app)
  trim(app)
}

main.js

import defineDirectives from '/@/utils/directive.js';
defineDirectives(app);

页面上,在元素dom上面直接添加v-focus,v-trim,如果是弹窗的话,需要打开弹窗之后执行才生效

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值