【问题标题】:Vue.js triggers button unexpectedlyVue.js 意外触发按钮
【发布时间】:2020-07-27 10:49:15
【问题描述】:

我准备了一个小提琴:https://jsfiddle.net/frvuw35k/

<div id="app">
  <h2>Vue Event Test</h2>
  <form @submit.prevent>
    <div class="form-group row">
            <div class="col-sm-12 input-group">
                <input v-model="search" class="form-control" placeholder="Search users by Display Name"
                            @keyup.enter="doSearch">
                <div class="input-group-append">
                    <button class="btn btn-primary" :disabled="!search" type="button"
                                @click.prevent="doSearch">
                            Search
                    </button>
                </div>
            </div>
        </div>
    <div class="form-group row">
                <div class="col-12">
                    <button v-if="showButton" class="btn btn-info"
            @click.prevent="doSthElse">Do something else</button>
                </div>
            </div>
  </form>
</div>
new Vue({
  el: "#app",
  data: {
    search: null,
    showButton: false
  },
  methods: {
    doSearch: function(){
        console.log('do search:', this.search)
      this.showButton = true
    },
    doSthElse: function(){
        console.log('do something else')
    }
  }
})

这模拟了我在 Vue 应用程序中遇到的问题。

还有第二个按钮,当满足条件时显示。此条件是搜索的结果,通过在输入上按 Enter 键触发。

在满足条件后第二次输入时,如果单击其他地方并将焦点重新放在输入上,则触发第二个按钮...

我不明白原因,也没有找到避免它的方法。

【问题讨论】:

    标签: javascript vue.js


    【解决方案1】:

    说明

    这是由表单中的浏览器行为引起的。

    正常的行为是当用户在输入中按下Enter键时,它会提交表单。

    此外,要提交表单,浏览器会在表单中查找一个按钮,在您的情况下,这就是您的“执行其他操作”按钮。

    所以当用户按下 Enter 时,它会在你的最后一个按钮上触发一个按钮按下,调用 doSthElse 方法。

    如何解决

    要解决此问题,只需在表单上添加 @keydown.enter.prevent 侦听器以防止触发默认行为。

    我用修复更新了你的小提琴:https://jsfiddle.net/vy57d63f/

    【讨论】:

    • 谢谢。我在输入上尝试了 .prevent ,但没有运气,但我没有想出表单的想法......
    【解决方案2】:

    使用这个:你需要使用@keydown 并防止修饰符

    <input v-model="search" class="form-control" placeholder="Search users by Display Name"
                            @keydown.enter.prevent="doSearch"/>
    

    【讨论】:

    • 因为你的回答,我搜索了一下,发现一个网站通常建议只使用 keydown:mutuallyhuman.com/blog/… 对此有什么想法吗?
    • 非常好的文章
    猜你喜欢
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多