我写了一个有用的'移动'事件库(available here)。它基本上统一了触摸事件,以便单个事件可以绑定到一个元素,并且无论用户的设备(即移动设备或桌面设备)如何,它都会触发。
代码一直运行良好,但在调试用户问题时,我注意到当使用jQuery 1.9.0时,库不再起作用(所有以前版本的jQuery都不会导致问题)。
有问题的代码如下:
// Add Event shortcuts:
$.each(('tapstart tapend tap singletap doubletap taphold swipe swipeup swiperight swipedown swipeleft scrollstart scrollend orientationchange').split(' '), function(i, name) {
$.fn[name] = function(fn)
{
return fn ? this.bind(name, fn) : this.trigger(name);
};
$.attrFn[name] = true;
});
以下行中的错误Uncaught TypeError: Cannot set property 'tapstart' of undefined
:
$.attrFn[name] = true;
有人能指出我为此做出修复的方向吗?
我已将2个jsFiddle演示放在一起以显示问题:
如果我定义$.attrFn
,则会修复swipe*
个事件的代码,但会导致其他问题,例如tap
和doubletap
。例如,绑定tap
现在会产生错误:Uncaught TypeError: Cannot call method 'call' of undefined
,其中有问题的行为:
$.event.handle.call( obj, event );
再一次,有两个jsFiddles供参考:
$.attrFn = $.attrFn || {};
修复的jQuery 1.9.0)答案 0 :(得分:10)
该对象(.attrFn
)只是1.8中的存根;它在1.9中消失了。
如果你的代码在1.8中工作,你应该可以添加
$.attrFn = $.attrFn || {};
某处修复它。
答案 1 :(得分:8)
From the jQuery 1.9 Release Notes
其他未记录的属性和方法
以下内部属性和方法从未记录过,并已在1.9中删除。任何依赖于它们的代码 应该改写。
- jQuery.deletedIds
- jQuery.uuid
- 的 jQuery.attrFn 强>
- jQuery.clean()
- jQuery.event.handle()
- jQuery.offset.bodyOffset()