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:
- Working version (utilizzando jQuery 1.8.3)
- Non-working version (utilizzando jQuery 1.9.0)
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:
- Working version (utilizzando jQuery 1.8.3)
- Non-working version (utilizzando jQuery 1.9.0 con fix
$.attrFn = $.attrFn || {};
)
Se si controlla il codice sorgente di 1.8, è abbastanza ovvio :-) – Pointy