Ich habe eine Bibliothek von nützlichen 'mobilen' Ereignissen geschrieben (available here). Es vereinheitlicht Berührungsereignisse im Wesentlichen, so dass ein einzelnes Ereignis an ein Element gebunden werden kann und unabhängig vom Gerät des Benutzers (d. H. Mobil oder Desktop) ausgelöst wird.
Der Code hat gut funktioniert, aber beim Debuggen eines Benutzers Problem, habe ich festgestellt, dass die Bibliothek nicht mehr funktioniert, wenn jQuery 1.9.0 verwendet wird (alle früheren Versionen von jQuery verursachen kein Problem).
Der problematische Code lautet wie folgt:
// 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;
});
Der Fehler Uncaught TypeError: Cannot set property 'tapstart' of undefined
auf der folgenden Zeile:
$.attrFn[name] = true;
Kann mir jemand zeigen in die Richtung für das eine Korrektur der Herstellung?
ich habe zusammen 2 jsFiddle Demos das Problem zu zeigen:
- Working version (mit jQuery 1.8.3)
- Non-working version (mit jQuery 1.9.0)
Wenn ich definiere $.attrFn
, das behebt den Code für die swipe*
Ereignisse, aber verursacht dann Probleme mit anderen wie tap
und doubletap
. Zum Beispiel erzeugt tap
Bindung nun den Fehler: Uncaught TypeError: Cannot call method 'call' of undefined
, mit der problematischen Linie ist:
$.event.handle.call(obj, event);
Wieder einmal gibt es zwei jsFiddles Referenz:
- Working version (mit jQuery 1.8.3)
- Non-working version (mit jQuery 1.9.0 mit
$.attrFn = $.attrFn || {};
fix)
Wenn Sie das 1.8-Quellcode überprüfen, es ist ziemlich offensichtlich :-) – Pointy