关于百度团队的touch.js 事件代理下,点击监听元素的子元素,当前元素($(this))却不是监听元素

最近才开始使用touch.js,用的是百度团队的那个。
使用中如下面的代码,如果我使用jquery,监听的是js_close,最终我们的this指向的是监听元素,无论是点击其本身还是其子元素。
但在touchjs下面,我并未对子元素进行阻止冒泡操作,点击子元素<span>,得到的this是<span>,而不是我意想中的父元素js_close。
难道事件委托和事件代理是2个不同的概念?
恳请理解的朋友给予解答,谢谢!
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>touch使用</title>
</head>
<body>
<div class="box">

<div class="js_close"><span>点我点我</span></div>

</div>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/touch.min.js"></script>
<script type="text/javascript">
$(function(){

touch.on('.js_close','tap',document,function(e){
  //e.preventDefault();
  console.log(e.target.nodeName);
  console.log($(this));
})
$(document).on('click','.js_close',function(e){
  console.log(e.target.nodeName);
  console.log($(this));
});

});
</script>
</body>
</html>

阅读 6.9k
1 个回答

百度的touch.js是通过给document元素添加事件来代理到具体的触发元素上,实际上document元素上绑定了touchstart、touchmove等,然后根据暴露的API,触发相应的元素上的事件,这个你可以阅读以下源码。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题