Javascript V-model绑定在移动设备上不起作用,除非我添加了警报

Javascript V-model绑定在移动设备上不起作用,除非我添加了警报,javascript,html,vue.js,Javascript,Html,Vue.js,我的vue应用程序中的表单输入绑定有一个非常奇怪的问题。“我的输入”字段是具有以下语法的自动建议搜索字段: <input class="input" type="text" v-model="search" @input="onChange" @keyup.up="onArrowUp" @keyup.down="onArrowDown" @keyup.enter="onEnter"/> 从中可以看出,它在桌面上工作得非常好,但当我在手机上试用时,过滤就没有发生。它只显示完整的结果列

我的vue应用程序中的表单输入绑定有一个非常奇怪的问题。“我的输入”字段是具有以下语法的自动建议搜索字段:

<input class="input" type="text" v-model="search" @input="onChange" @keyup.up="onArrowUp" @keyup.down="onArrowDown" @keyup.enter="onEnter"/>

从中可以看出,它在桌面上工作得非常好,但当我在手机上试用时,过滤就没有发生。它只显示完整的结果列表,而不考虑输入。奇怪的是,如果我进行故障排除,并尝试向onChange和filterResults函数添加警报,它会突然平稳运行。关于发生了什么以及我如何修复它,有什么想法吗?

这真是一个有趣的想法!事实证明,双向数据绑定的去耦合完成了一半的工作

同样值得注意的是:关键事件在手机上并不总是被正确检测到,重叠事件是不好的。当事件触发并在组件状态下设置某些内容时,执行顺序并不总是明显的

我将您的代码笔导出,并将HTML而不是pug模板编辑到:

<input class="input" type="text" v-bind:value="search" @input="updateSearch($event.target.value)" @keyup.up="onArrowUp" @keyup.down="onArrowDown" @keyup.enter="onEnter"/>
而不是一次性的

如果你想要工作的例子,我很乐意帮你把它拉上拉链,但我不想把它放在网上,因为它是一支私人钢笔

下面是JavaScript文件的完整差异:

% diff js/index.js ../jobrisk-calculator_oprindelig/js/index.js 
16,18c16,19
<               filterResults(){
<                       this.isOpen = true;
<                       this.results = this.items.filter(item => item.toLowerCase().indexOf
(this.search.toLowerCase()) > -1);
---
>               onChange () {
>                       this.reset()
>                       this.isOpen = true
>                       this.filterResults()
20,22c21,22
<               updateSearch(value){
<                       this.search = value;
<                       this.filterResults();
---
>               filterResults() {
>                       this.results = this.items.filter(item => item.toLowerCase().indexOf
(this.search.toLowerCase()) > -1);
49c49
<                       this.setResult(this.results[this.arrowCounter]);
---
>                       this.search = this.results[this.arrowCounter]
%diff js/index.js../jobrisk-calculator\u oprindelig/js/index.js
16,18c16,19
item.toLowerCase().indexOf
(this.search.toLowerCase())>-1);
---
>onChange(){
>这个.reset()
>this.isOpen=true
>this.filterResults()
20,22c21,22
filterResults(){
>this.results=this.items.filter(item=>item.toLowerCase().indexOf
(this.search.toLowerCase())>-1);
49c49
this.search=this.results[this.arrowCounter]

来自哥本哈根的问候!

请提供一个完整的示例。
这个搜索定义在哪里?@kichik:我已经更新了指向CodePen的链接,以引用编辑器,在编辑器中,所有代码都可用
警报
不利于调试,因为它会中断执行。如果你有android手机,你可以尝试远程调试~我会将
filterResults
从一个方法移动到一个计算属性。这就是我过去进行打字前风格搜索的典型方式。这些错误描述了根本问题,显然这是一个功能:and。工作起来很有魅力!Tak for hjælpen:)@SorenRomer No probles:)hold og lykke!
    filterResults(){
        this.isOpen = true;
        this.results = this.items.filter(item => item.toLowerCase().indexOf(this.search.toLowerCase()) > -1);
    },
    updateSearch(value){
        this.search = value;
        this.filterResults();
    },
% diff js/index.js ../jobrisk-calculator_oprindelig/js/index.js 
16,18c16,19
<               filterResults(){
<                       this.isOpen = true;
<                       this.results = this.items.filter(item => item.toLowerCase().indexOf
(this.search.toLowerCase()) > -1);
---
>               onChange () {
>                       this.reset()
>                       this.isOpen = true
>                       this.filterResults()
20,22c21,22
<               updateSearch(value){
<                       this.search = value;
<                       this.filterResults();
---
>               filterResults() {
>                       this.results = this.items.filter(item => item.toLowerCase().indexOf
(this.search.toLowerCase()) > -1);
49c49
<                       this.setResult(this.results[this.arrowCounter]);
---
>                       this.search = this.results[this.arrowCounter]