如何在字段焦点上打开 vuejs datepicker?
How to open vuejs datepicker on field focus?
只有当我点击它的输入字段时,vuejs 日期选择器才会打开。当我通过按上一个字段中的 Tab 键专注于它的字段时,我希望它弹出。
我在 Whosebug 上寻找解决方案,但找不到任何类似的东西。
这是我的代码:
const app = new Vue({
el: '#app',
components: {
vuejsDatepicker
}
})
<div id="app">
<input type="text" placeholder="Textbox" autofocus>
<br><br>
<vuejs-datepicker placeholder="Datepicker"></vuejs-datepicker>
</div>
<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/vuejs-datepicker"></script>
每当我在文本框上写完东西后按 Tab 键时,焦点都会转到日期选择器字段,但只有当我使用鼠标单击它时才会弹出选择器。而我希望它每次都在焦点上打开。
有人可以帮忙吗?
我查看了源代码。焦点事件未绑定,因此您可以就此提出问题。但是你可以通过以下方式实现效果:
<datepicker ref="dp1" @focusin.native="onfocusin"></datepicker>
以及方法:
methods: {
onfocusin(){
setTimeout((ev)=>{
this.$refs.dp1.isOpen || this.$refs.dp1.showCalendar(ev);
}, 50)
}
}
另一种选择是通过 mixin
修改插件 a,您可以在其中修改 showCalendar
当前切换日历可见性的方法以仅允许其打开日历:
let myDatepicker = {
mixins: [datepicker],
methods: {
showCalendar(){
if(this.isOpen) return;
return datepicker.showCalendar.apply(this, arguments)
}
}
}
我在使用建议的 mixin 时遇到了一些问题,我对其进行了修改并在下面提供了一个完整的工作示例。
如果用户单击或跳转到该字段,他们将不会看到闪烁,并且日历只会打开一次。
<template>
<toggleDatepicker
ref="datepicker"
@focusin.native="showCalendar"
/>
</template>
<script>
import Datepicker from 'vuejs-datepicker';
let toggleDatepicker = {
mixins: [Datepicker],
methods: {
showCalendar(){
if(this.isOpen) return;
return Datepicker.methods.showCalendar.apply(this);
}
}
};
export default {
components: {toggleDatepicker},
methods: {
showCalendar() {
this.$refs.datepicker.$children[0].$emit('showCalendar')
},
},
}
</script>
这是基于:
- vuejs-日期选择器:^1.6.2
只有当我点击它的输入字段时,vuejs 日期选择器才会打开。当我通过按上一个字段中的 Tab 键专注于它的字段时,我希望它弹出。
我在 Whosebug 上寻找解决方案,但找不到任何类似的东西。
这是我的代码:
const app = new Vue({
el: '#app',
components: {
vuejsDatepicker
}
})
<div id="app">
<input type="text" placeholder="Textbox" autofocus>
<br><br>
<vuejs-datepicker placeholder="Datepicker"></vuejs-datepicker>
</div>
<script src="https://unpkg.com/vue"></script>
<script src="https://unpkg.com/vuejs-datepicker"></script>
每当我在文本框上写完东西后按 Tab 键时,焦点都会转到日期选择器字段,但只有当我使用鼠标单击它时才会弹出选择器。而我希望它每次都在焦点上打开。 有人可以帮忙吗?
我查看了源代码。焦点事件未绑定,因此您可以就此提出问题。但是你可以通过以下方式实现效果:
<datepicker ref="dp1" @focusin.native="onfocusin"></datepicker>
以及方法:
methods: {
onfocusin(){
setTimeout((ev)=>{
this.$refs.dp1.isOpen || this.$refs.dp1.showCalendar(ev);
}, 50)
}
}
另一种选择是通过 mixin
修改插件 a,您可以在其中修改 showCalendar
当前切换日历可见性的方法以仅允许其打开日历:
let myDatepicker = {
mixins: [datepicker],
methods: {
showCalendar(){
if(this.isOpen) return;
return datepicker.showCalendar.apply(this, arguments)
}
}
}
我在使用建议的 mixin 时遇到了一些问题,我对其进行了修改并在下面提供了一个完整的工作示例。
如果用户单击或跳转到该字段,他们将不会看到闪烁,并且日历只会打开一次。
<template>
<toggleDatepicker
ref="datepicker"
@focusin.native="showCalendar"
/>
</template>
<script>
import Datepicker from 'vuejs-datepicker';
let toggleDatepicker = {
mixins: [Datepicker],
methods: {
showCalendar(){
if(this.isOpen) return;
return Datepicker.methods.showCalendar.apply(this);
}
}
};
export default {
components: {toggleDatepicker},
methods: {
showCalendar() {
this.$refs.datepicker.$children[0].$emit('showCalendar')
},
},
}
</script>
这是基于:
- vuejs-日期选择器:^1.6.2