2013-01-17 14 views
8

Ho scritto una libreria di utili eventi "mobili" (available here). In sostanza, unifica gli eventi tattili in modo che un singolo evento possa essere associato a un elemento e si attiverà indipendentemente dal dispositivo dell'utente (ad es. Mobile o desktop).

Il codice funziona bene, ma durante il debug di un problema dell'utente, ho notato che la libreria non funziona più quando jQuery 1.9.0 viene utilizzato (tutte le versioni precedenti di jQuery non causano problemi).

Il codice problematico è il seguente:

// 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; 
}); 

L'errore Uncaught TypeError: Cannot set property 'tapstart' of undefined sulla riga seguente:

$.attrFn[name] = true;

Qualcuno mi può puntare nella direzione di produrre una correzione per questo?

ho messo insieme 2 demo jsFiddle per mostrare il problema:

se definisco $.attrFn, questo risolve il codice per gli eventi swipe*, ma causa problemi con altri come tap e doubletap. Ad esempio, il legame tap ora produce l'errore: Uncaught TypeError: Cannot call method 'call' of undefined, con la linea problematica dell'essere:

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

una volta, ci sono due jsFiddles per riferimento:

+0

Se si controlla il codice sorgente di 1.8, è abbastanza ovvio :-) – Pointy

risposta

10

Quell'oggetto (.attrFn) era solo uno stub in 1.8; è andato in 1.9.

Se il codice ha lavorato in 1.8, si dovrebbe essere in grado di aggiungere

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

da qualche parte per risolvere il problema.

+0

... o, naturalmente, semplicemente non fare l'aggiornamento, se la proprietà non è lì. – Pointy

+0

Sì, funziona bene ... http://jsfiddle.net/9J3Qw/5/ – Archer

+0

Funziona bene per eventi 'swipe *', ma se proviamo ad aggiungere un tocco, ora si verifica un errore diverso. Si prega di vedere la mia domanda aggiornata. +1 per l'aiuto qui, intendiamoci. – 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

Sfortunatamente, jquerymobile sembra usarlo ancora. Non sei sicuro di come risolvere questo problema oltre a farlo localmente. Questo potrebbe farlo funzionare per dev/test, ma non va bene per il rilascio. –

+0

@GerryGleason Sei sull'ultima versione di jQuery mobile? Dovrebbero supportare la versione più recente e migliore di jQuery. In caso contrario, presentare un bug con loro. – epascarello

+1

jQuery Mobile 1.4+ in realtà non usa attrFn, controlla se esiste per determinare la versione di jQuery. Se stai usando jQueryMigrate, genererà un falso avviso. Vedi https://github.com/jquery/jquery-mobile/issues/5984. – Osan

Problemi correlati