当我关注标签下面的输入元素时,我需要向标签元素添加类。我目前的解决方案是:
HTML:
<label for="formProductId" ref="productIdLabel" class="form-element-title">Product ID</label>
<input id="formProductId" @blur="toggleFocus('productIdLabel', false)" @focus="toggleFocus('productIdLabel', true)" v-model="filterValues.productId" :name="filterOptions.productId === true ? 'productId' : false" type="text">JS:
toggleFocus(ref: string, enable: boolean) {
if (enable) {
(this.$refs[ref] as HTMLElement).classList.add("js-focused");
} else {
(this.$refs[ref] as HTMLElement).classList.remove("js-focused");
}
}我想删除ref属性,并通过所选元素本身完全切换以js为中心的类。如何选择最近的标签元素并编辑它的类?
发布于 2020-05-25 21:44:07
更好的方法是使用动态类。请参阅此示例:
new Vue({
el: '#app',
data: {
productIdLabel: false
}
}).js-focused {
background-color: lightblue;
}<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id='app'>
<label for="formProductId" class="form-element-title" :class="{'js-focused': productIdLabel == true}">Product ID</label>
<input id="formProductId" @blur="productIdLabel = false" @focus="productIdLabel = true" type="text">
</div>
与组件和多个表单输入一起使用:
Vue.component("form-label", {
template: `<div>
<label :for="info.id" class="form-element-title" :class="{'js-focused': isFocused == true}">{{info.label}}</label>
<input :id="info.id" @blur="isFocused = false" @focus="isFocused = true" type="text">
</div>`,
props: ["info"],
data: function(){
return {
isFocused: false
}
}
})
new Vue({
el: '#app',
data: {
form: [{
label: "Product Id",
id: "formProductId"
}, {
label: "Another Element",
id: "anoterId"
}, {
label: "Third Element",
id: "thirdId"
}]
}
}).js-focused {
background-color: lightblue;
}<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id='app'>
<form-label v-for='el in form' :info='el'></form-label>
</div>
发布于 2020-05-25 21:36:57
您可以在event.target中使用previousElementSibling。
示例:
new Vue({
el: '#app',
methods: {
toggleLabelColor(event) {
event.target.previousElementSibling.classList.toggle('input-focused')
}
}
})input {
display: block;
}
.input-focused {
color: green;
}<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<label>I turn green when focused.</label>
<input @focus="toggleLabelColor" @blur="toggleLabelColor">
<label>I turn green when focused.</label>
<input @focus="toggleLabelColor" @blur="toggleLabelColor">
<label>I turn green when focused.</label>
<input @focus="toggleLabelColor" @blur="toggleLabelColor">
</div>
https://stackoverflow.com/questions/62003300
复制相似问题