jQuery 1.9.0打破了$ .attrFn对象

Ben*_*enM 9 javascript jquery

我编写了一个有用的"移动"事件库(可在此处获得).它基本上统一了触摸事件,以便单个事件可以绑定到一个元素,并且无论用户的设备(即移动设备或桌面设备)如何,它都会触发.

代码一直运行良好,但在调试用户问题时,我注意到当使用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;
});
Run Code Online (Sandbox Code Playgroud)

Uncaught TypeError: Cannot set property 'tapstart' of undefined以下行中的错误:

$.attrFn[name] = true;

任何人都可以指出我为此做出修复的方向吗?

我已经将2个jsFiddle演示放在一起以显示问题:

如果我定义$.attrFn,这将修复swipe*事件的代码,但然后导致其他人的问题,如tapdoubletap.例如,绑定tap现在产生错误:Uncaught TypeError: Cannot call method 'call' of undefined,有问题的行是:

$.event.handle.call( obj, event );
Run Code Online (Sandbox Code Playgroud)

再一次,有两个jsFiddles供参考:

Poi*_*nty 11

那个对象(.attrFn)只是1.8中的存根; 它在1.9中消失了.

如果您的代码在1.8中工作,您应该能够添加

$.attrFn = $.attrFn || {};
Run Code Online (Sandbox Code Playgroud)

某处修复它.

  • @epascarello在不提供链接的情况下大喊mmmmm (2认同)

epa*_*llo 8

来自jQuery 1.9发行说明

其他未记载的属性和方法

以下内部属性和方法从未记录过,并已在1.9中删除.任何依赖于它们的代码都应该被重写.

  • jQuery.deletedIds
  • jQuery.uuid
  • jQuery.attrFn
  • jQuery.clean()
  • jQuery.event.handle()
  • jQuery.offset.bodyOffset()