trim.js 977 Bytes
Newer Older
chenwei's avatar
chenwei committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
// 获取元素
function getInput(el) {
  let inputEle;
  if (el.tagName !== "INPUT") {
    // 若 el-input 中 type 为 textarea
    if (el._prevClass.includes("el-textarea")) {
      inputEle = el.querySelector("textarea");
    } else {
      inputEle = el.querySelector("input");
    }
  } else {
    inputEle = el;
  }
  return inputEle;
}

function dispatchEvent(el, type) {
  const evt = new Event(type);
  el.dispatchEvent(evt);
}

const Trim = {
  inserted: (el) => {
    let 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");
      }
    };
    el.inputEle = inputEle;
    el._blurHandler = handler;
    inputEle.addEventListener("blur", handler);
  },
  unbind(el) {
    const { inputEle } = el;
    inputEle.removeEventListener("blur", el._blurHandler);
  },
};
export default Trim;