无法从自定义自动完成搜索栏中选择项目 (Vue.js/Vuetify.js)

Posted

技术标签:

【中文标题】无法从自定义自动完成搜索栏中选择项目 (Vue.js/Vuetify.js)【英文标题】:Can't select item from custom autocomplete search bar (Vue.js/Vuetify.js) 【发布时间】:2020-09-07 13:52:48 【问题描述】:

注意:我没有使用 v-autocomplete 或 v-combobox,因为它们无法完成我想做的某些事情。

我在实现自动完成搜索栏时遇到问题。搜索栏按预期执行所有操作,除了一件小事,那就是能够选择一个项目。当我将鼠标悬停在某个项目上时,指针会变成一只手,表示它是可点击的。一旦被“点击”,@click 事件应该会调用一个方法,但是当一个项目被“点击”时什么都不会发生。

我知道问题出在哪里,但我正在努力寻找解决方案。问题出在以下部分:

<v-text-field //this is the input
    ...
    @focus="isFocused = true" @blur="isFocused = false"
    ...
></v-text-field>

<v-list v-show="queried_cards.length && isFocused"> //this is the list
    <v-list-item @click="setCard(card)" v-for="(card, index) in queried_cards" :item="card" :key="index">
        ...
    </v-list-item> 
</v-list>

因此,基于上述标记,我只想在数组 queried_cards 不为空且 v-text-field 被关注时显示列表。如果我单击文本字段,则列表将被隐藏,这是我想要的结果。碰巧它与能够选择一个项目的功能相冲突,因为当您单击一个项目时,这与单击文本字段(触发@blur)相同。这导致 setCard() 方法没有被调用,因为 v-list 在事件 @click="setCard(card)" 发生之前就消失了。

我已经把这个积压了一段时间,以为我最终能够找到一个解决方案,但我只是被这个项目的所有其他东西搞得筋疲力尽。

我创建了一个代码笔来说明我的问题:https://codepen.io/chataolauj/pen/RwwYxBg?editors=1010

【问题讨论】:

【参考方案1】:

问题是你设置了列表&lt;v-list v-if="queried_cards.length &amp;&amp; isFocused" class="pa-0 overflow-y-auto" max-height="300" two-line&gt;

当您单击列表项时,isFocused 设置为 false,因为您在输入字段上绑定了 @blur="isFocused=false"。所以它消失了。当您选择项目时,您需要想办法让isFocused 保持为真。

快捷方式:

在您的v-container 上绑定一个点击功能(您希望当用户点击输入或结果列表之外时,隐藏点亮的结果):

  <v-container fluid @click="checkHide">
    checkHide(e)
   // if click on input or the result list, keep the list to show
      if(e.target.tagName ==="INPUT" || e.target.classList.contains("v-list-item__content"))
        this.isFocused = true
      else
// click outside of them, hide it
        this.isFocused = false
      
    

在您的输入元素上,删除 @blur

【讨论】:

是的,我知道问题出在哪里,并在我的原始帖子中指定了它。我想看看是否有人对如何使它在点击事件完成后不模糊有任何想法。 如果我单击 v-container 中的任何内容,它可以工作,但如果我单击 v-container 中的某些内容,则它不起作用。例如,如果我单击应用程序栏,则列表文本字段和列表仍然是焦点。既然是这种情况,我尝试检查 v-app,但没有任何作用。

以上是关于无法从自定义自动完成搜索栏中选择项目 (Vue.js/Vuetify.js)的主要内容,如果未能解决你的问题,请参考以下文章

cakePHP 从自定义数组构建一个选择框

如何在 ionic 2 中自动完成(搜索栏)

模态视图控制器从自定义单元格选择问题中分离 - iOS 7

使用基本适配器解决方案从自定义列表中删除行视图

jquery自动完成没有拿起数组

Segue 未从自定义 tableView 单元格触发