记录:el-input需要自定义placeholder的情况下所出现的一些BUG

项目难点:

在项目中UI给出了这一种必填输入框:

需要在placeholder中增加必填星号且颜色为红色

在使用中文输入法的时候,情况如下:

并没有实际确认下去输入的内容,输入框的input和change事件监听不到用户正在输入。

解决办法:

通过compositionstart、compositionupdate、compositionend三个事件对输入框进行监听

compositionstart:用户输入开始,仅第一次触发

compositionupdate:用户输入中,每次触发

compositionend:用户输入结束,结束触发

在事件返回值中

data:正在输入的内容

isTrusted:用户输入是否结束

隐藏placeholder条件:

条件一:在用户输入结束后且输入框内没有内容的时候

条件二:输入框内没有内容

代码如下:

<template>
  <div id="c_input">
    <el-input
      v-model="propValue"
      @input="handleInput"
      @compositionstart="oncomposition"
      @compositionupdate="oncomposition"
      @compositionend="oncomposition"
    ></el-input>
    <span class="placeholder" v-show="isShow" :class="{ require: required }">
      {{ placeholder }}
    </span>
  </div>
</template>

<script>
export default {
  name: "c_input",
  data() {
    return {
      isShow: true,
      propValue: this.value,
    };
  },
  props: {
    value: [String, Number],
    placeholder: [String, Number],
    required: Boolean,
    number: Boolean,
  },
  watch: {
    propValue(ev) {
      this.isShow = ev.length === 0;
    },
  },
  methods: {
    handleInput(ev) {
      if (this.number) this.propValue = String(this.propValue).replace(/\D/g, "");
      this.$emit("input", this.number ? ev.replace(/\D/g, "") : ev);
    },
    oncomposition(ev) {
      this.isShow = (!ev.isTrusted && !this.propValue) || ev.data.length === 0;
    },
  },
};
</script>

<style scoped>
#c_input {
  position: relative;
}
.el-input {
  position: relative;
  z-index: 2;
}
.placeholder {
  display: inline-block;
  position: absolute;
  left: 15px;
  top: 50%;
  transform: translateY(-50%);
  user-select: none;
  cursor: text;
  color: #c0c4cc;
  font-size: 14px;
  z-index: 1;
}
.require::after {
  content: "*";
  font-size: 14px;
  color: #d40000;
  position: relative;
  left: 4px;
  top: 2px;
}
</style>
<style>
#c_input .el-input__inner {
  background-color: transparent !important;
}
</style>

以上仅个人理解,如果错误请指出谢谢。

方法不是唯一,实践试出真理。有更好的办法请评论,学习道路无止尽。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你在使用Vue CLI 5搭建的Vue3 TypeScript项目时,想将vue.config.js更改为vue.config.ts。根据引用的描述,你尝试了一些操作,将vue/cli-service版本降低到4.5.13,这样is-file-esm文件夹就不会被下载了,然后你成功地将vue.config.js改为vue.config.ts。这个操作可能解决了你的问题。 然而,根据你提供的信息,我无法得知具体的报错内容。如果你能提供更多关于报错的细节或错误信息,我可以更准确地帮助你解决这个问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue项目 vue.config.js改成vue.config.ts](https://blog.csdn.net/wentingya/article/details/130486341)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [vue.config.js](https://download.csdn.net/download/weixin_44692055/12050547)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [vue2之vue.config.js最全配置教程](https://blog.csdn.net/xhd11257339/article/details/124062188)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值