首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过函数访问元素的Vue.js

问通过函数访问元素的Vue.js
EN

Stack Overflow用户
提问于 2020-05-25 21:21:46
回答 2查看 298关注 0票数 2

当我关注标签下面的输入元素时,我需要向标签元素添加类。我目前的解决方案是:

HTML:

代码语言:javascript
复制
<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:

代码语言:javascript
复制
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为中心的类。如何选择最近的标签元素并编辑它的类?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-25 21:44:07

更好的方法是使用动态类。请参阅此示例:

​

代码语言:javascript
复制
new Vue({
  el: '#app',
  data: {
    productIdLabel: false
  }
})
代码语言:javascript
复制
.js-focused {
  background-color: lightblue;
}
代码语言:javascript
复制
<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>

​

与组件和多个表单输入一起使用:

​

代码语言:javascript
复制
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"
    }]
  }
})
代码语言:javascript
复制
.js-focused {
  background-color: lightblue;
}
代码语言:javascript
复制
<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>

​

票数 1
EN

Stack Overflow用户

发布于 2020-05-25 21:36:57

您可以在event.target中使用previousElementSibling。

示例:

​

代码语言:javascript
复制
new Vue({
  el: '#app',
  methods: {
    toggleLabelColor(event) {
      event.target.previousElementSibling.classList.toggle('input-focused')
    }
  }
})
代码语言:javascript
复制
input {
  display: block;
}

.input-focused {
  color: green;
}
代码语言:javascript
复制
<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>

​

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62003300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档