javascript - V-model 绑定在移动设备上不起作用,除非我添加警报
问题描述
我的 vue 应用程序中的表单输入绑定有一个非常奇怪的问题。我的输入字段是具有以下语法的自动建议搜索字段:
<input class="input" type="text" v-model="search" @input="onChange" @keyup.up="onArrowUp" @keyup.down="onArrowDown" @keyup.enter="onEnter"/>
函数 v-model 引用如下所示:
onChange () {
this.reset()
this.isOpen = true
this.filterResults()
},
filterResults () {
this.results = this.items.filter(item => item.toLowerCase().indexOf(this.search.toLowerCase()) > -1);
}
它在桌面上完美运行,正如在这个 CodePen中看到的那样,但是当我在移动设备上试用它时,过滤不会发生。无论输入如何,它都只显示完整的结果列表。奇怪的是,如果我排除故障,并尝试向 onChange 和 filterResults 函数添加警报,它会突然运行顺利。关于正在发生的事情以及如何解决它的任何想法?
解决方案
这是一个非常有趣的!事实证明,将两种方式的数据绑定解耦就成功了一半。
同样值得注意的是:在移动设备上并不总是能正确检测到关键事件,重叠事件是不好的。当事件触发并在组件状态中设置某些内容时,执行顺序并不总是很明显。
我导出了您的 codepen 并将 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"/>
我在 vue 组件中的前两个方法现在是:
filterResults(){
this.isOpen = true;
this.results = this.items.filter(item => item.toLowerCase().indexOf(this.search.toLowerCase()) > -1);
},
updateSearch(value){
this.search = value;
this.filterResults();
},
而不是 onChange 之一。
如果您想要工作示例,我很乐意为您拉上拉链,但我不只是想把它放到网上,因为它是私人笔。
以下 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]
来自哥本哈根的问候!
推荐阅读
- javascript - 登录前检查多个条件使用 auth guard
- laravel - 我想验证 unit_amount[1], unit_amount[2],unit_amount[3].....,unit_amount[n] .i 只验证 unit_amount[0],
- google-cloud-functions - google cloud函数:下载文件到根目录python 3.9
- node.js - 从另一台服务器停止并重新启动 node.js 服务器
- javascript - PHP Decimal to base64 使用 javascript 给出不同的结果
- wix - wix customaction 与 Publish Event="DoAction" 一起使用时会出现错误 2896
- codeigniter-3 - 如何创建 docx 文件并使用 PhpWord 下载它
- javascript - 刷新后 Github 页面 URI 上的客户端路由和 404
- c# - 使用 C# 在 XML 文件中转换 CSV
- python - 熊猫从应用于列的字典返回函数创建列