javascript - 输入光标在输入事件时跳转到输入字段的末尾

标签 javascript html vue.js

我正在尝试在输入事件中将用户输入转换为大写

因此,每当我在输入字段中键入一个键时,我都会面临以下问题

  1. 当用户在中间输入时,光标跳到输入值的末尾。
  2. 最后输入的字符(不是最后一个字符)没有转换为大写。

这是 JS fiddle 的链接 https://jsfiddle.net/aeL051od/重现问题

new Vue({
  el: "#app",
  data() {
    return {
      input: null
    }
  },
  methods: {
    handleInput(e) {
      this.input = e.target.value ?
        e.target.value.toString().toUpperCase() :
        e.target.value;
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">
  <input type="text" v-model="input" @input="handleInput"> {{ input }}
  <!-- {{ input }} is just for reference -->
</div>

最佳答案

如果您(或 Vue)将新值复制到输入中,光标将设置到输入的末尾。如果您想保留以前的位置,您需要捕获位置,进行更改,然后在 $nextTick 上恢复位置。

另请注意,如果您打算在处理程序中设置 this.input,那么您也没有必要使用 v-model。保存 event 也不太可能是明智的,但你可以。

new Vue({
  el: "#app",
  data() {
    return {
      input: null,
      event: null
    }
  },
  methods: {
    handleInput(e) {
      const el = e.target;
      const sel = el.selectionStart;
      const upperValue = el.value.toUpperCase();

      el.value = this.input = upperValue;
      this.event = e;
      this.$nextTick(() => {
        el.setSelectionRange(sel, sel);
      });
    }
  }
});
#app {
  background: #fff;
  border-radius: 4px;
  padding: 20px;
  transition: all 0.2s;
}

input {
  margin-bottom: 20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <input type="text" @input="handleInput">
  <p>{{ event ? event.target.value : null }}</p>
  <p>
    {{input}}
  </p>
</div>

关于javascript - 输入光标在输入事件时跳转到输入字段的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55478646/

相关文章:

vue.js - 如何将事件绑定(bind)到 Vuetify 中的 TreeView 节点?

javascript - 从ajax延迟响应中获取jsonObject

javascript - 如何使用正则表达式从地址字符串中删除门牌号和入口?

html - Li 文本格式问题 请帮忙?

javascript - 在 d3 中处理多个下拉列表

html - CSS 样式表未链接到 HTML

javascript - 在 JavaScript 中传递变量

javascript - Webpack:导出到窗口中的现有模块

javascript - 在 Vuejs 中从 child 到 parent 的事件监听

javascript - 使用 BootstrapVue 和 VueJs 切换事件导航项