2013-01-17 8 views
8

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:

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:

+0

Wenn Sie das 1.8-Quellcode überprüfen, es ist ziemlich offensichtlich :-) – Pointy

Antwort

10

Das Objekt (.attrFn) war nur ein Stich in 1.8; es ist in 1.9 gegangen.

Wenn Ihr Code in 1.8 gearbeitet, sollten Sie in der Lage sein

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

irgendwo hinzuzufügen, es zu beheben.

+0

... oder natürlich einfach nicht tut das Update, wenn die Eigenschaft nicht vorhanden ist. – Pointy

+0

Yep - funktioniert gut ... http://jsfiddle.net/9J3Qw/5/ – Archer

+0

Es funktioniert gut für 'Swipe *' Ereignisse, aber wenn wir versuchen, einen Tap hinzuzufügen, tritt jetzt ein anderer Fehler auf. Bitte sehen Sie meine aktualisierte Frage. +1 für die Hilfe hier, wohlgemerkt. – BenM

8

From the jQuery 1.9 Release Notes

Other undocumented properties and methods

The following internal properties and methods were never documented and have been removed in 1.9. Any code that depends on them should be rewritten.

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

Leider scheint jquerymobile es immer noch zu verwenden. Ich bin mir nicht sicher, wie ich das beheben kann, außer es lokal zu patchen. Das mag es für Dev/Test funktionieren, aber nicht gut für die Veröffentlichung. –

+0

@GerryGleason Sind Sie auf der neuesten Version von jQuery Mobile? Sie sollten die neueste und beste Version von jQuery unterstützen. Wenn nicht, einen Fehler mit ihnen einreichen. – epascarello

+1

jQuery Mobile 1.4+ verwendet tatsächlich nicht attrFn, es prüft, ob es existiert, um die Version von jQuery zu bestimmen. Wenn Sie jQueryMigrate verwenden, wird eine falsche Warnung generiert. Siehe https://github.com/jquery/jquery-mobile/issues/5984. – Osan

Verwandte Themen