touch事件影响click事件探究
来源:互联网 发布:湖南道县事件知乎 编辑:程序博客网 时间:2024/05/06 23:25
项目中遇到touch事件影响click事件的问题,输入密码后(错误的密码),点击确认支付,马上就触发了忘记密码按钮了,这显然不是我们想要的。我们想要的是用户输错密码后,用户点击忘记密码才触发事件。往下看。
什么是touchstart事件?
touchstart事件:当手指触摸屏幕时候触发,即使已经有一个手指放在屏幕上也会触发。
顺带说一下与touchstart比较相似的事件:
touchmove事件:当手指在屏幕上滑动的时候连续地触发。在这个事件发生期间,调用preventDefault()事件可以阻止滚动。
touchend事件:当手指从屏幕上离开的时候触发。
一个button绑定touchstart事件,点击此button后使用onclick连带触发,此处连带触发的意思是使用attr函数给某元素添加onclick事件时这个onclick事件马上就被触发了,而不是到用户点击这个元素才触发。
此处为什么使用touchstart事件而不用click事件呢?因为移动端touchstart比click触发的要快,用户体验好。
例如:
$("#qezfBtn").live("touchstart",function(){
submitPay();
});
function submitPay(){
$("#btn2").attr("onclick","openUrl('url')");
}
function openUrl(url){
window.location.href=url;
}
id为qezfBtn的元素绑定了touchstart事件,当手指触摸屏幕时候触发submitPay()事件;触发submitPay时为id为btn2的函数添加onclick,添加完了之后马上就触发onclick事件了,即openUrl方法马上就被调用了。这不是我们想要的效果,我们想要的是用户点击完id为btn2的元素后才触发onclick事件,才调用openUrl方法。
原因:
涉及一个时间流的概念,点击事件可以分解成多个事件。
在移动端,手指点击一个元素,会经过:touchstart --> touchmove -> touchend -->click。
事件流本身会持续进行下去的。
touchstart 触发之后,click事件还被触发了,onclick属性也被触发了。
做了个小测试:
<!DOCTYPE HTML>
<html>
<body>
<head>
<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
<script type="text/javascript">
$('#buttonn').live("click",function(){
alert("click");
});
$('#buttonn').live("touchend",function(){
alert("touchend");
});
</script>
</head>
<button id="buttonn">测试touch影响click事件</button>
</body>
</html>
点击button后会先弹出touchend,接着会弹出click。说明了点击事件可以分解成多个事件。
那能不能只触发touchend,不触发click呢?答案是可以的,阻止事件的默认行为,使用preventDefault() 方法。
$('#buttonn').live("click",function(){
alert("click");
});
$('#buttonn').live("touchend",function(e){
e.preventDefault();
alert("touchend");
});
解决方案,本人想到的有两个:
1、阻止事件的默认行为
$("#qezfBtn").live("touchstart",function(e){
e.preventDefault();
submitPay();
});
2、不要使用事件流中两个事件,此处事件流为touchstart --> touchmove -> touchend -->click。前面用了touchstart ,后面不使用click事件即可,可以换成ontouchstart或者ontouchendsubmitPay方法换成以下这样:
function submitPay(){
$("#btn2").attr("ontouchstart","openUrl('url')");
或者 $("#btn2").attr("ontouchend","openUrl('url')");
}
参考资料:http://www.tuicool.com/articles/3QZ7jeV
0 0
- touch事件影响click事件探究
- 移动端touch事件影响click事件
- 移动端touch事件影响click事件的相关解决方法
- touch事件与click事件
- touch事件,tap,click,press,slide,swipe
- 移动端-click、touch、tap、swipe事件
- Android应用程序Click事件与Touch事件处理
- Android touch事件、click事件、focus、selected的区别
- 关于click事件与touch事件冲突的问题
- 移动端touch事件和click事件的区别
- 关于 Touch事件和Click事件的冲突问题
- tap,touch,touchstart事件与click事件的区别
- 移动前端—touch事件与click事件的区别
- 移动端touch事件和click事件的区别
- 移动端click时间、touch事件、tap事件详解
- 移动端click时间、touch事件、tap事件详解
- android touch事件分发机制的探究
- ie8 bug click事件 影响表单提交事件
- java普通类、抽象类和接口的再学习
- WireShark抓包学习
- unity调用摄像头拍照
- 内部类的一些知识
- WKWebView缓存的那点事
- touch事件影响click事件探究
- Html5滑动事件,用于滑动分页
- LoadRunner接口性能测试示例
- 大数据分析技术研究报告(一)
- EBS中描述性弹性域的定义过程
- request和response
- HDU 5795 A Simple Nim (找规律+sg函数+博弈)
- python学习初体验——如何编写和运行程序
- 内存管理机制(详细介绍)