日常开发中总是能遇到一些特殊的需求,比如:
如上图,载体编号由扫码枪扫码返回,因为扫码枪扫码之后的输出是在光标位置,光标在哪里它就在哪里输出结果,所以为了用户体验和防止用户错误操作,要实现不管用户做什么操作光标始终定位在输入框。
思路:要光标始终聚焦在出库单输入框,第一时间想到input的focus属性,但实际中如果进行了其他操作,这个时候光标就从输入框失焦了。
思来想去最终决定监听用户click事件,废话不多说上代码。
<template>
<div style="width: 500px; padding: 50px;">
<el-form :model="ruleForm" ref="ruleForm" label-width="100px">
<el-form-item label="载体编号">
<el-input v-model="ruleForm.ztCode" ref="myInput">
<el-button slot="append" type="primary" size="mini">录入</el-button>
</el-input>
</el-form-item>
</el-form>
</div>
</template>
<script>
export default {
data() {
return {
ruleForm: {
ztCode: ''
}
}
},
beforeDestroy() {
document.removeEventListener('click', this.preventBlur)
},
mounted() {
this.$refs.myInput.focus()
document.addEventListener('click', this.preventBlur)
},
methods: {
preventBlur(event) {
const element = this.$refs.myInput.$el
if (!element.contains(event.target)) {
this.$refs.myInput.focus()
}
}
}
}
</script>