vue.js - Firefox 中的 Vue.js 复选框问题,Chrome 和 IE 中的工作文件
问题描述
我正在使用一个复选框。
<template v-for="(item,index) in items">
<div >
<input type="checkbox"
v-model="item.checked"
@click="selectionCheckboxClicked(index,item.checked)"
/>
</div>
.....
这是JS代码
selectionCheckboxClicked: function selectionCheckboxClicked(index,checked) {
console.log(this.items[index].checked);
console.log(checked);
....
},
item.checked 的初始值为 false。当我单击 Chrome 或 IE 中的复选框时,它会选中该复选框并在控制台日志中显示“true”。但是,当我在 Firefox 中运行代码时,虽然它确实改变了状态,但控制台日志在 selectionCheckboxClicked() 中显示为 false。我需要根据 selectionCheckboxClicked() 中复选框的当前状态采取一些措施,我发现在当前情况下很难实现。
应感谢任何解决问题的建议。
解决方案
因为对于checkbox,不v-model
绑定(查看Vue Github: source codes for v-model)。然后会在失去焦点后被解雇。@change
@input
@change
但是您也不应该依赖订单@click
或@change
将首先执行(查看此答案以获取更多详细信息)。
因此,一种解决方案是使用@change=handler($event)
,因为v-model
使用一个名为 important=true 的参数addHandler
来确保它比您的事件处理程序首先被触发。
new Vue({
el: '#app',
data() {
return {
testValues: false
}
},
methods: {
selectionCheckboxClicked: function(ev) {
console.log(this.testValues);
console.log(ev.target.checked);
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
<div id="app">
<div>
<input type="checkbox" v-model="testValues" @change="selectionCheckboxClicked($event)" />
</div>
</div>
或者另一种解决方案是使用@input
,但您应该依赖于输入 Dom 元素上检查或不检查的内容。
new Vue({
el: '#app',
data() {
return {
testValues: false
}
},
methods: {
selectionCheckboxClicked: function(ev) {
console.log('v-model:', this.testValues);
console.log('inputCheckedAtDom:', ev.target.checked);
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
<div id="app">
<div>
<input type="checkbox" v-model="testValues" @input="selectionCheckboxClicked($event)" />
</div>
</div>
如果你还喜欢用@click
,一个解决方案其实是一样的@input
。使用 oneref
访问输入 Dom 元素。
new Vue({
el: '#app',
data() {
return {
testValues: false
}
},
methods: {
selectionCheckboxClicked: function(ev) {
console.log('v-model:', this.testValues);
console.log('inputCheckedAtDom:', this.$refs.test.checked);
}
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
<div id="app">
<div>
<input ref="test" type="checkbox" v-model="testValues" @click="selectionCheckboxClicked($event)" />
</div>
</div>
setTimeout 将起作用,因为它将在当前任务完成并重新渲染后执行。即使您使用setTimeout(()=>{}, 0)
(delay 0 seconds ),它仍然可以工作。
推荐阅读
- sql - 如何按条件获取动态累积数据
- jbehave - 升级到最新的 jbehave 版本 4.5.1 后运行故事失败
- c# - 自定义 GUI TextField 和 ObjectField 不赋值
- mysql - 错误代码 1241 - 操作数应包含 1 列
- angular-cli - 在消费者应用程序生产构建中无法访问 Angular 库资产图像
- python - 如何替换所有出现的特定嵌套标签
- python - 使用 PyPDF2 裁剪不会改变页面大小
- r - 如何将 NA 填充到 R 中的下一行?
- ruby-on-rails - Codeship 不适用于 Rails multiverse gem
- ios - 根据状态更改 UIButton 中 ImageView 的 tint 颜色