Vue中给带v-model的select加required类、解决报错及设置默认选中
解决Vue中下拉框required报错与默认值设置问题
我来帮你搞定这两个问题,咱们一步步拆解:
一、修复required=""导致的getAttribute错误
在Vue中直接使用原生的required=""会触发这个错误,因为Vue对表单指令的处理需要用响应式绑定的方式来声明必填规则。你应该根据复选框的选中状态来决定下拉框是否需要必填——毕竟只有用户勾选了某一天,对应的时间选择才需要生效对吧?
修改方案:用:required(v-bind:required的简写)绑定一个布尔值,关联复选框的selected状态,同时修复循环中重复的id和for属性(否则标签和复选框关联会失效):
<div v-for="(value, index) in day" :key="index" class="checkboxFour"> <input type="checkbox" :id="`need-${index}`" :value="value.val" v-model="value.selected" style="width: 10%!important;"> <label :for="`need-${index}`" style=" width: 30%!important;">{{value.name}}</label> <!-- 绑定required到复选框的选中状态 --> <select v-model="value.from" class="select-style" :required="value.selected"> <option value="08:00">08.00</option> <option value="12:00">12.00</option> <option value="20:00">20.00</option> <option value="23:00">23.00</option> </select> <select v-model="value.to" class="select-style" :required="value.selected"> <option value="08:00">08.00</option> <option value="12:00">12.00</option> <option value="20:00">20.00</option> <option value="23:00">23.00</option> </select> <br> </div>
二、预先选中特定值
要实现默认选中,只需要在你的day数组数据中,给每个对象的from和to字段设置对应的默认值即可——Vue的v-model会自动匹配option的value值完成选中。
比如你想默认让所有日期的from选中12:00,to选中20:00,你的data应该像这样:
data() { return { day: [ { name: '周一', val: 'mon', selected: false, from: '12:00', to: '20:00' }, { name: '周二', val: 'tue', selected: false, from: '12:00', to: '20:00' }, // 其他日期对象... ] } }
注意:option的value是字符串类型,所以你设置的默认值也要是字符串,避免类型不匹配导致无法选中。这样页面加载时下拉框就会自动选中你设置的默认值,用户也可以随时修改。
内容的提问来源于stack exchange,提问作者Wanderer




