【问题标题】:Popover not closing when clicking outside its focus area在其焦点区域外单击时弹出框未关闭
【发布时间】:2019-03-19 08:20:13
【问题描述】:

我正在使用带有 Vue.js 的 Bootstrap Vue,并且遇到了一个问题,我正在迭代一些项目并将它们显示给用户。

问题是,当用户单击其中一个弹出框时,打开的每个弹出框都会关闭(如我所愿),但是当用户单击目标(​​打开)弹出框的焦点区域之外时,它不会不再关门了。

看起来每次用户点击目标弹出框时都会运行打开动画。

代码如下:

<template>
  <div>
    <div class="row" v-for="(n, i) in 5" :key="n">
      <div :id="'popover' + visitor.id + '-' + i" @click="$root.$emit('bv::hide::popover')">
        <div class="card">
          <b-popover :target="'popover' + visitor.id + '-' + i">
            <template slot="title">
              Edit image
              <button
                class="close-popover"
                @click="$root.$emit('bv::hide::popover', 'popover' + visitor.id + '-' + i)"
              >X</button>
            </template>
          </b-popover>
        </div>
      </div>
    </div>
  </div>
</template>

感谢任何帮助!

【问题讨论】:

    标签: javascript twitter-bootstrap vue.js bootstrap-vue


    【解决方案1】:

    您可以在弹出框上设置triggers="click blur"。当用户在弹出框外或目标上单击时,这将关闭它。

    您可以查看更多HERE

    【讨论】:

    • 除了@Vedran 的评论,请提及您不一定需要按钮来完成此操作。您可以在可触发元素中使用属性 tabindex="0" 使其具有焦点。
    【解决方案2】:

    你可以在created中使用这个函数

    created(){
        document.getElementsByTagName('body')[0].addEventListener('click', e => {
          this.$root.$emit('bv::hide::popover')
        });
    },
    

    【讨论】:

      【解决方案3】:

      将此 Jquery 添加到您的代码中,它可能会起作用。

       $('body').on('click', function (e) {
              $('[target=popover]').each(function () {
                  if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {
                      $(this).popover('hide');
                  }
              });
          });
      

      你也可以试试这个:

      您可以将其添加到您的代码中并尝试。

       <a class="close" href="#">Close</a>  
      

      同时添加这个 jquery:

       $('.close').click(function() {
             $(".class").fadeOut(300);
          });
      

      【讨论】:

      • 我使用的是 Vue.js,所以 jQuery 不是一个理想的解决方案。不过谢谢你的建议!
      • 我也在做同样的事情,这样我的工作就完成了
      【解决方案4】:

      一个可能的解决方案是 vue 指令v-click-outside

      基本上,你只需安装它:npm install --save v-click-outside

      并使用:

      <template>
        <div v-click-outside="onClickOutside"></div>
      </template>
      

      【讨论】:

      • 不幸的是,这个指令不起作用。 Vue.js 似乎无法识别它。还是谢谢
      猜你喜欢
      • 2013-11-10
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多