Vue select 在触发任何操作之前更改事件触发
Vue select change event firing before I trigger any action
我有一个 Vue 应用程序似乎甚至在我更改选择之前就触发了更改事件,最近尝试了 @input 但仍然发生同样的事情(如下所示)
请注意,我已经尝试了@change 和@input,但事件仍然在加载控件时触发
现在,在我对组件范围进行 css 更改之前,它就可以工作了,因此它不会影响周围的 css。但是无法理解为什么这会有什么不同。
有谁知道为什么添加选项标签和内容会触发更改事件?
<div class="form-group" :class="{formError: errors.has('formSection')}">
<label for="formSection">Section*</label>
{{ formModel }}
<select
v-model="formModel.idSection1"
class="form-control"
id="formSection"
name="formSection"
@input="onChangeSectionLevel1">
<option v-for="sectionLevel1 in formModel.sectionLevel1"
v-bind:value="sectionLevel1.value"
v-bind:key="sectionLevel1.id">
{{ sectionLevel1.value }}
</option>
</select>
<span v-if="errors.has('formSection')">This field is required</span>
</div>
只要我添加循环遍历项目的选项标签,就会调用 onChangeSectionLevel1 函数。我以为它可能是 vee-validate,但把它去掉了,仍然会发生。
methods: {
onChangeSectionLevel1() {
alert("changed");
...
}
}
更新:
我注意到,如果我打印出被绑定的对象,我得到的是缺少 idSection1 项。
{
"idSection2": null,
"idSection3": null,
}
如果我然后像下面那样放置一个虚拟选项,那么我可以看到我的 3 个数据项,包括 idSection1,如果我使用 v-for
循环遍历,它就会丢失
<select
v-model="formModel.idSection1"
class="form-control"
id="formSection"
name="formSection"
@change="onChangeSectionLevel1">
<option>Hello World</option>
</select>
数据项仍然有 idSection1 列出
{
"idSection1": null,
"idSection2": null,
"idSection3": null
}
非常感谢
不是真正的答案,但上面的代码在 js 中可以找到并按预期工作 fiddle
https://jsfiddle.net/andrewp37/a4obkhd5/1/
代码:
<div id="app">
<label for="formSection">Section*</label>
{{ formModel }}
<select
v-model="formModel.idSection1"
class="form-control"
id="formSection"
name="formSection"
@change="onChangeSectionLevel1">
<option v-for="sectionLevel1 in formModel.sectionLevel1"
v-bind:value="sectionLevel1.value"
v-bind:key="sectionLevel1.id">
{{ sectionLevel1.value }}
</option>
</select>
</div>
new Vue({
el: "#app",
data: {
formModel: {
idSection1: null,
sectionLevel1: [
{
id: 1,
value: "Section 1"
}
]
}
},
methods: {
onChangeSectionLevel1() {
alert("changed");
}
}
})
我注意到添加了很多断点后,模型在页面加载后被替换。
我有一个 Vue 应用程序似乎甚至在我更改选择之前就触发了更改事件,最近尝试了 @input 但仍然发生同样的事情(如下所示)
请注意,我已经尝试了@change 和@input,但事件仍然在加载控件时触发
现在,在我对组件范围进行 css 更改之前,它就可以工作了,因此它不会影响周围的 css。但是无法理解为什么这会有什么不同。
有谁知道为什么添加选项标签和内容会触发更改事件?
<div class="form-group" :class="{formError: errors.has('formSection')}">
<label for="formSection">Section*</label>
{{ formModel }}
<select
v-model="formModel.idSection1"
class="form-control"
id="formSection"
name="formSection"
@input="onChangeSectionLevel1">
<option v-for="sectionLevel1 in formModel.sectionLevel1"
v-bind:value="sectionLevel1.value"
v-bind:key="sectionLevel1.id">
{{ sectionLevel1.value }}
</option>
</select>
<span v-if="errors.has('formSection')">This field is required</span>
</div>
只要我添加循环遍历项目的选项标签,就会调用 onChangeSectionLevel1 函数。我以为它可能是 vee-validate,但把它去掉了,仍然会发生。
methods: {
onChangeSectionLevel1() {
alert("changed");
...
}
}
更新:
我注意到,如果我打印出被绑定的对象,我得到的是缺少 idSection1 项。
{
"idSection2": null,
"idSection3": null,
}
如果我然后像下面那样放置一个虚拟选项,那么我可以看到我的 3 个数据项,包括 idSection1,如果我使用 v-for
循环遍历,它就会丢失<select
v-model="formModel.idSection1"
class="form-control"
id="formSection"
name="formSection"
@change="onChangeSectionLevel1">
<option>Hello World</option>
</select>
数据项仍然有 idSection1 列出
{
"idSection1": null,
"idSection2": null,
"idSection3": null
}
非常感谢
不是真正的答案,但上面的代码在 js 中可以找到并按预期工作 fiddle
https://jsfiddle.net/andrewp37/a4obkhd5/1/
代码:
<div id="app">
<label for="formSection">Section*</label>
{{ formModel }}
<select
v-model="formModel.idSection1"
class="form-control"
id="formSection"
name="formSection"
@change="onChangeSectionLevel1">
<option v-for="sectionLevel1 in formModel.sectionLevel1"
v-bind:value="sectionLevel1.value"
v-bind:key="sectionLevel1.id">
{{ sectionLevel1.value }}
</option>
</select>
</div>
new Vue({
el: "#app",
data: {
formModel: {
idSection1: null,
sectionLevel1: [
{
id: 1,
value: "Section 1"
}
]
}
},
methods: {
onChangeSectionLevel1() {
alert("changed");
}
}
})
我注意到添加了很多断点后,模型在页面加载后被替换。