9

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

代码运行良好,但在调试用户问题时,我注意到在使用 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*事件的代码,但会导致其他事件出现问题,例如tapdoubletap。例如,绑定tap现在产生错误:Uncaught TypeError: Cannot call method 'call' of undefined,有问题的行是:

$.event.handle.call( obj, event );

再次,有两个 jsFiddles 供参考:

4

2 回答 2

12

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

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

$.attrFn = $.attrFn || {};

在某个地方修复它。

于 2013-01-17T17:48:04.610 回答
8

来自 jQuery 1.9 发行说明

其他未记录的属性和方法

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

  • jQuery.deletedIds
  • jQuery.uuid
  • jQuery.attrFn
  • jQuery.clean()
  • jQuery.event.handle()
  • jQuery.offset.bodyOffset()
于 2013-01-17T17:49:21.850 回答