javascript - 绑定到 vue v-model 的 bootstrap-datepicker 在失去焦点时恢复到以前的数据
问题描述
我有一个表单,其中日期选择器跟随文本输入。给出文本输入后,日期选择器从 ajax 调用接收日期。现在的焦点是日期选择器,它显示(如预期的那样)收到的日期。当用户切换到下一个输入时,日期选择器恢复到之前的数据,在大多数情况下最终成为占位符。
Vue应用程序代码:
var app = new Vue({
el: "#app",
data: {
theDate: '',
aNumber: 0,
bNumber: 0
},
mounted() {
$("#aDate").datepicker({
format: 'dd/mm/yyyy'
});
$("#aDate").datepicker().on(
"changeDate", () => {
this.theDate = $('#aDate').val()
}
);
},
methods: {
check() {
console.log('theDate: ' + this.theDate + ', aNumber: ' + this.aNumber + ', bNumber: ' + this.bNumber);
},
setDate() {
this.theDate = '18/12/2018';
}
}
})
和html:
<body>
<div id="app">
<input type="text" id="bNumber" v-model="bNumber" /><br>
<input type="text" id="aDate" placeholder="mm/dd/yyyy" v-model="theDate" /><br>
<input type="text" id="aNumber" v-model="aNumber" /><br>
<button type="button" @click="check">Check</button>
<button type="button" @click="setDate">Set Date</button>
</div>
</body>
如果遵循这些步骤,可以在这个小提琴中观察到这一点
- 在顶部输入中输入任意数字
- 然后标签到日期选择器输入
- 单击“设置日期”按钮(模拟接收数据)
- 然后通过单击再次关注日期选择器输入
- 现在跳到下一个输入
- 日期选择器中的日期已恢复为之前的值
如何防止这种情况并使数据持久化?
我已经尝试过这个问题的解决方案,但行为是一样的。
解决方案
问题是日期选择器控制的实际日期值,在这种情况下,使用v-model
. 以至于将 设置theDate
为任何值并不会真正影响任何事情。这是可以理解的,因为您使用的是具有 jQuery 依赖项的 Bootstrap。我会推荐Vue-flatpickr作为替代方案。但如果你需要坚持这一点,这里有一个可能的解决方法:
为简洁起见,我删除了不必要的属性:
<input type="text" ref="datepicker" placeholder="mm/dd/yyyy" />
var app = new Vue({
el: "#app",
data: {
theDate: '',
aNumber: 0,
bNumber: 0
},
mounted() {
$(this.$refs.datepicker).datepicker({
format: 'dd/mm/yyyy'
})
.on("changeDate", e => {
this.update(e.target.value);
});
},
methods: {
check() {
console.log('theDate: ' + this.theDate + ', aNumber: ' + this.aNumber + ', bNumber: ' + this.bNumber);
},
setDate() {
this.update('18/12/2018');
},
update(value) {
$(this.$refs.datepicker).datepicker("update", value);
}
}
})
基本上,您需要使用提供的 API 更新日期。
推荐阅读
- powershell - Powershell 新手:如何使用嵌套的 foreach 或数组(或任何其他解决方案)将 2 个或更多变量放入同一个文件中?
- r - 滚动时如何保持titlePanel(或shinyWidgets::panel)固定?
- cygwin - Windows server 2016 上的 Cygwin 安装问题 - 退出 256
- php - 填充表单字段 php wordpress
- python - Python 中的 PayPal 自适应付款转换货币请求(已弃用的 API)
- mysql - Symfony 4.3 两个实体之间的唯一实体不起作用
- regex - 为什么使用 find 时这个正则表达式在 shell 上不起作用
- reactjs - 从 React 中导入的文件调用函数时出错
- google-cloud-platform - 如何限制 G Suite 中的服务帐户访问权限?
- arrays - 获取数组中数组的名称?