uni-app 多个input,使用变量控制焦点正常,手动点击input时却获取不到焦点

uni-app 多个input,使用变量控制焦点正常,手动点击input时却获取不到焦点

开发环境 版本号 项目创建方式
Windows windows10 HBuilderX

示例代码:

<view class="createClass-listView"> <view>年级</view> <input type="text" v-model="classGrader" :focus="gradeFocus" placeholder="输入年级" @confirm="nextFocus('class')" confirm-type="next" /> </view> <view class="createClass-listView"> <view>班级</view> <input type="text" ref="class" v-model="className" :focus="classFocus" placeholder="输入班级名称" @confirm="nextFocus('teacher')" confirm-type="next" /> </view> <view class="createClass-listView"> <view>导师</view> <input type="text" v-model="teacherName" :focus="teacherFocus" placeholder="输入姓名" @confirm="nextFocus('phone')" confirm-type="next" /> </view> <view class="createClass-listView"> <view>手机号</view> <input type="text" v-model="teacherPhone" maxlength="11" :focus="phoneFocus" placeholder="输入手机号" @confirm="nextFocus('studentNum')" confirm-type="next" /> </view> <view class="createClass-listView"> <view>学生数</view> <input type="text" v-model="studentNum" maxlength="7" :focus="studentNumFocus" placeholder="请输入学生个数" @confirm="confirm()" confirm-type="done" /> </view>

//nextFocus代码:
nextFocus(inputType){
// uni.hideKeyboard(); //隐藏软键盘
let that = this;
switch(inputType){
case “grade”:
this.gradeFocus = false; // 每次都要初始化 focus 属性
setTimeout(() => {
this.$nextTick(function() {
that.gradeFocus=true
});
},50)
break;
case “class”:
this.classFocus = false; // 每次都要初始化 focus 属性
setTimeout(() => {
this.$nextTick(function() {
that.classFocus=true
});
},50)
break;
case “teacher”:
this.teacherFocus = false; // 每次都要初始化 focus 属性
setTimeout(() => {
this.$nextTick(function() {
that.teacherFocus=true
});
},50)
break;
case “phone”:
this.phoneFocus = false; // 每次都要初始化 focus 属性
setTimeout(() => {
this.$nextTick(function() {
that.phoneFocus=true
});
},50)
break;
case “studentNum”:
this.studentNumFocus = false; // 每次都要初始化 focus 属性
setTimeout(() => {
this.$nextTick(function() {
that.studentNumFocus=true
});
},50)
break;
}
}


更多关于uni-app 多个input,使用变量控制焦点正常,手动点击input时却获取不到焦点的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 多个input,使用变量控制焦点正常,手动点击input时却获取不到焦点的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个典型的 uni-app 中 input 焦点控制问题。问题主要在于手动点击 input 时触发了原生事件,与通过变量控制焦点的逻辑产生了冲突。

建议优化方案:

  1. 使用统一的焦点控制变量
data() {
  return {
    currentFocus: '' // 当前获得焦点的input类型
  }
}
  1. 修改模板中的 focus 绑定
<input :focus="currentFocus === 'grade'" @focus="setFocus('grade')" />
<input :focus="currentFocus === 'class'" @focus="setFocus('class')" />
  1. 简化焦点控制方法
setFocus(type) {
  this.currentFocus = type
}

nextFocus(inputType) {
  this.currentFocus = inputType
}
回到顶部