这两天发生了一个错误。 每次单击下面的键盘时,只要单击一次数字,文本框就会显示两次重复值,如下所示:
控制台还包含以下错误消息:
显示项目代码。 代码如下。
ul li v-for='(item,index ) inkeys ' : key=' index ' v-html=' item.name ' @ mousedown=' handlekeyboardclick ick 索引) @ mouseup=' state change (index ) @touchend='statechange () ) ) touchend )因此,有两个: mousedown和touchstart
事件的处理顺序通常如下:
touchstarttouchmovetouchendmousemovemousedownmouseupclick
调试的结果,确实同时发生了两个事件。 解决方法如下所示。
添加stop事件修饰符以阻止冒泡
@ touch start.stop=' handlekeyboardclick (item.val,index ) '结果:控制台中没有错误信息,但仍然会触发两次。
添加预设方法
1 )在handleKeyboardClick方法中添加e.preventDefault (; 只是添加了此行的代码,没有添加参数e。 控制台报告错误,但在文本框中只显示一次。
方案1 :
handlekeyboardclick : function (代码,索引) { e.preventDefault ); }结果:
方案2 :
handlekeyboardclick : function (代码,索引,e ) { e.preventDefault ); }结果:
2 )将$event添加到touchstart事件
@ touch start=' handlekeyboardclick (item.val,index,$event )”和控制台不报告错误,但文本框中显示两个相同的数字。
3 .终极解决方案:分解mousedown和touchstart两个事件以确定设备。 如果是PC,则可以通过调用mousedown事件,否则调用touchstart事件来解决该问题,但缺点是重复代码会增加。
ul v-if='isPC' li v-for='(item, index ) inkeys ' : key=' item.val ' v-html=' item.name ' @ mousedown=index (@ mouseup=(状态更改) index index ) inkeys ' : key=' item.val ' v-html=' item.name ' @ touch start=' handlekeyboardclick (item.val,index )