2
0
mirror of https://github.com/tenrok/vue2-datepicker.git synced 2026-06-22 11:20:36 +03:00

fix: clickoutside bad when use append-to-body (#291)

This commit is contained in:
mengxiong10
2019-04-09 20:39:04 +08:00
parent 20d1f19c2d
commit 9bb604610c
+18 -4
View File
@@ -1,19 +1,33 @@
let mouseDownTarget
const handleMouseDown = evt => (mouseDownTarget = evt.target)
export default { export default {
bind (el, binding, vnode) { bind (el, binding, vnode) {
el['@clickoutside'] = e => { el['@clickoutside'] = e => {
const mouseUpTarget = e.target
const popupElm = vnode && vnode.context && vnode.context.popupElm
if ( if (
!el.contains(e.target) && mouseDownTarget &&
!(vnode.context.popupElm && vnode.context.popupElm.contains(e.target)) && mouseUpTarget &&
!el.contains(mouseUpTarget) &&
!el.contains(mouseDownTarget) &&
!(
popupElm &&
(popupElm.contains(mouseDownTarget) ||
popupElm.contains(mouseUpTarget))
) &&
binding.expression && binding.expression &&
vnode.context[binding.expression] vnode.context[binding.expression]
) { ) {
binding.value() binding.value()
} }
} }
document.addEventListener('click', el['@clickoutside'], false) document.addEventListener('mousedown', handleMouseDown)
document.addEventListener('mouseup', el['@clickoutside'])
}, },
unbind (el) { unbind (el) {
document.removeEventListener('click', el['@clickoutside'], false) document.removeEventListener('mousedown', handleMouseDown)
document.removeEventListener('mouseup', el['@clickoutside'])
} }
} }