【发布时间】:2017-08-21 04:47:58
【问题描述】:
我有一个列表作为组件,它包含像 facebook 这样的隐藏弹出窗口。例如,您单击列表中的任何项目,它会显示有关该项目的弹出窗口 here is my interface that I mentioned
这是模板
<template id="adboard-group-sidebar-member-template">
<li class="card-item" data-member-id="{{ member.id }}" @click="toggleMemberCard">
item content
</li>
</template>
这里是 vuejs
toggleMemberCard(event) {
this.popupDisplayed = !this.popupDisplayed;
},
使用 v-if / v-show 属性可以正常运行。但仅适用于项目列表。如果用户想点击界面上的任何位置。我正在检查以下几行:
popupListener(event) {
let element = $(event.target),
allCard = $(document).find('.popup'),
pointer_popup = element[0].closest('.popup'),
pointer_card = element[0].closest('.card-item');
if ((!pointer_popup && !pointer_card) || (pointer_popup && pointer_card)) {
allCard.hide();
}
}
这也在 VueJS 的 ready 方法中监听。这不是一个好的解决方案。我想知道并寻找 VueJS 更好的解决方案。
【问题讨论】:
-
popuplistener是做什么的?比如您希望用户在哪里点击打开弹出窗口? -
删除
element[0].closest中的[0]。.closest()是一个 jQuery 方法。它必须用于 jQuery 元素。使用[0]获取 DOM 元素....所以该方法不起作用。 -
这段代码工作正常,但我不想尽可能多地使用 jquery @LouysPatriceBessette
-
我想在用户单击弹出窗口和列表中的任意位置时关闭弹出窗口。 @kevlai22
-
«我不想尽可能多地使用 jquery» --
element上面两行定义为 jQuery 元素。
标签: javascript jquery vue.js popup listener