范例:
打开官方论坛 w w w .phpwind.net/read/3712973
点击楼主楼层左下的“回复‘按钮
正常:跳转到页面最下方回复框
错误:无法跳转,其他的回复按钮的onclick事件也不能正常触发
在global.js里有这么一段
//ios/android兼容mouse事件 by kejun https://gist.github.com/3358036
;(function ($) {
$.support.touch = 'ontouchend' in document;
if (!$.support.touch) {
return;
}
var eventMap = {
click: 'touchend',
mousedown: 'touchstart',
mouseup: 'touchend',
mousemove: 'touchmove'
};
var simulateEvent = function (eventType) {
$.event.special[eventType] = {
setup: function () {
var el = $(this);
el.bind(eventMap[eventType], $.event.special[eventType].handler);
if (this.nodeName === 'A' && eventType === 'click') {
this.addEventListener('click', function (e) {
e.preventDefault();
}, false);
(下略)
大意就是检测设备是否是触摸设备(通过最前面检测document是否有ontouchend属性,如果有就认为是触摸设备),如果是把onclick事件给禁掉(e.preventDefault()+返回false)。
但是问题是如果使用既支持触摸也支持鼠标的设备比如触摸屏笔记本,这个玩意就把鼠标onclick事件给废了,点击没效果了
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
看起来你遇到的问题是关于在移动设备上使用jQuery的事件绑定不兼容导致按钮点击无法正常触发。根据你提供的代码片段,这段脚本试图让jQuery支持触摸设备(如iOS、Android)上的事件,比如将click
事件映射为touchend
。但似乎这个实现没有按预期工作。
这里有几个可能的解决方向:
检查global.js的加载顺序:确保global.js
文件在所有依赖jQuery的脚本之前正确加载。如果加载顺序有误,可能会导致事件处理函数未被正确应用。
更新或替换兼容性代码:上述代码片段可能不是最优的解决方案,或者可能与你当前使用的jQuery版本或浏览器存在兼容性问题。你可以考虑使用更现代且广泛测试过的库,如jQuery Mobile,它专为移动设备优化,提供了更好的触摸事件处理。或者,直接使用原生JavaScript的addEventListener
方法来绑定touchstart
, touchend
等事件,以提高兼容性。
简化并调试:尝试简化问题,只保留一个简单的touchend
事件监听器作为测试,看是否能正常工作。这有助于确定问题是否出在事件映射逻辑上,还是其他地方。
查看控制台错误:打开浏览器的开发者工具,查看Console标签页中是否有任何错误信息。这些错误可能指向问题的根源。
禁用快速点击插件或功能:某些情况下,为了防止快速点击,页面可能会有防抖(debounce)或节流(throttle)的处理,这可能意外地阻止了事件的正常传播。确认是否有这样的逻辑,并适当调整或临时禁用以进行测试。
确保DOM元素已加载:如果你的JS代码在DOM元素尚未完全加载时就执行了绑定操作,也可能导致事件无法绑定。确保你的绑定代码放在$(document).ready()
或者使用原生JS的DOMContentLoaded
事件内。
如果以上建议仍不能解决问题,可能需要更详细的代码审查或具体的错误信息来进行进一步的诊断。