【问题标题】:Datalist - how to launch function on click option?Datalist - 如何在点击选项上启动功能?
【发布时间】:2021-01-12 22:41:26
【问题描述】:

我在 VueJS 中使用 input 搜索时遇到 datalist 问题,为什么当我用鼠标单击或输入 datalist 上的选项之一时,我的函数 getData() 被调用到 @ 987654325@和@keypress.enter没有启动?

这是我的代码:

模板:

          <input
            list="data"
            v-model.trim="searchBy"
            @keyup.enter="getAllDatas"
            type="text"
            placeholder="Find more data..."
          />
          <br />
          <datalist id="data">
              <option v-for="r in repos.items" 
                      :key="r.id" 
                      :value="r.name"
                      @click="getData(r.id)"
                      @keypress.enter="getData(r.id)"  />
          </datalist>

脚本:

 methods: {
    getAllDatas() {
      fetch(`someURL`)
        .then(res => res.json())
        .then(
          res => {
            this.data = res
          }
        )
    },
    ...mapActions(["fetchData"]),
    async getData() {
       await this.fetchData();
  },

我完全不知道这里出了什么问题,谁能告诉我?

【问题讨论】:

  • 我在你的方法部分没有看到 getData()

标签: javascript html css vue.js vuejs2


【解决方案1】:

&lt;datalist&gt; 控件没有自己的事件,您必须使用&lt;input&gt;。点击和键盘事件都会触发输入的keydown 监听器。

<input
  list="data"
  v-model.trim="searchBy"
  @keydown="getData"
  @keyup.enter="getAllDatas"
  type="text"
  placeholder="Find more data..."
/>

这会将事件传递给处理程序,因此除非您可以解决此问题,否则您可能希望改用 &lt;select&gt; 或自定义控件。

【讨论】:

  • 我不能这样做,因为我需要为我的 getData 函数提供一个属性,但在 input 我没有数据可以这样做
  • 在这种情况下,您不能使用数据列表。您的选择是 &lt;select&gt; 或模仿数据列表行为的自定义控件。
  • 你能展示一下女巫select的例子吗?我在前端很弱,但我需要这个控制:( plz
  • 嗯,这基本上就是您在这里所拥有的,但没有输入。所以你不会得到它的打字能力。如果需要,则必须使用自定义控件。这就是你想要的吗?
  • 谢谢@Dan,它有帮助!
猜你喜欢
  • 2021-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
相关资源
最近更新 更多