【问题标题】:How to close a dropdown list when clicking anywhere单击任意位置时如何关闭下拉列表
【发布时间】:2021-01-14 22:35:14
【问题描述】:

如何关闭单击任意位置时打开的下拉菜单?

这段代码:

<tr class="inputs-table">
  <td>Type object: </td>
  <td>
    <div class="select">
      <div class="select-header form-control" v-on:click="AddForm(1)">
        <span class="select__current">Please select one option</span>
      </div>
      <addForm v-if="addedForm === 1" />
    </div>
  </td>
</tr>
<tr class="inputs-table">
  <td>Type business-model: </td>
  <td>
    <div class="select">
      <div class="select-header form-control" v-on:click="AddForm(2)">
        <span class="select__current">Please select one option</span>
      </div>
      <addForm v-if="addedForm === 2" />
    </div>
  </td>
</tr>
export default {
  name: 'Index',
  data() {
    return {
      addedForm: 0,
    }
  },
  methods: {
    AddForm(number) {
      this.addedForm = number;
    },
    closeForm() {
      this.addedForm = false;
    }
  },
  components: {
    addForm,
  }
}

下拉列表:

接下来我可以尝试什么?

【问题讨论】:

标签: vue.js vuejs2


【解决方案1】:

您可以使用 if window.onClick 并查看它是否与您的元素匹配。如果没有,则关闭它;调用检查mounted和beforeDestroy或breforeRouteLeave点击的函数。

例如:

mounted(){
    this.hideNav()
},
methods: {
    hideNav() {
        window.onclick = function(event) {
        if (!event.target.matches('.select__body')) {
            this.closeForm()
        }
     }
   }
},
beforeRouteLeave() {
    this.hideNav()
}

【讨论】:

  • @АртёмСтоляр 拍我的坏话。答案已更新,您需要先拥有this.,然后才能调用hideNav
  • 嘿,对不起,谢谢,但仍然无法正常工作并给出错误“this.closeForm is not a function at window.onclick”
  • 也许你知道怎么回事
  • @АртёмСтоляр 将window.onclick = function(event) 替换为window.addEventListener("click", function(event) 看看是否有效
  • 不,又报错“ TypeError: this.closeForm is not a function at eval”
【解决方案2】:
<template>
  <div
    @click="dropdownIsActive = !dropdownIsActive"
    ref="dropdown"
  >
  </div>
</template>

<script>
  export default {
    data: () => ({
      dropdownIsActive: false
    }),
    created () {
      window.addEventListener('click', this.closeDropdown)
    },
    methods: {
      closeDropdown (e) {
        if (!this.$refs.dropdown.contains(e.target)) {
          this.dropdownIsActive = false
        }
      }
    },
    beforeDestroy () {
      window.removeEventListener('click', this.closeDropdown)
    }
  }
</script>

【讨论】:

    猜你喜欢
    • 2017-11-20
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多