2011-09-20 13 views
7

Ho il seguente diritto nella parte superiore del mio js (che è necessario per il plugin iScroll per funzionare).Riabilitare touchmove eventlistener. iPhone app con Phone gap

document.addEventListener('touchmove', function (e) {e.preventDefault();}, false); 

In alcune pagine, ho bisogno di riattivare questo in modo normale scorrimento iPhone prende il sopravvento (e per correggere i bug in cui la tastiera iPhone non popup su una casella di input quando iscroll viene utilizzato sulla pagina).

Non riesco ad allenare la sintassi. Qualcuno sa come?

+0

Prevenire il touchmove dal fare qualsiasi cosa è stato interrompere tutto lo scorrimento nella mia app Phonegap su Android! Quando ho rimosso quella linea, per il test, tutto ha funzionato bene ... compresi gli elementi iScroll. Quindi mi chiedo se ho bisogno di quella linea? –

risposta

12

Sarà necessario definire una funzione che gestisce il comportamento preventDefault, in questo modo:

document.addEventListener('touchmove', preventDefault, false); 
function preventDefault(e) { e.preventDefault(); }; 

In questo modo più avanti nel codice, è possibile rimuovere il listener di eventi e riattivare predefinito scorrimento:

document.removeEventListener('touchmove', preventDefault, false); 

Ora è possibile riaggiungerlo e rimuoverlo quando necessario.

Non è possibile eseguire questa operazione utilizzando un inline, funzione anonima come nel tuo post originale, perché l'unico modo è possibile fare riferimento a una funzione anonima è quello di lasciare prima che il fuoco e poi rimuovere il riferimento ad esso, ad esempio:

document.addEventListener('touchmove', function(e) { 
    e.preventDefault(); 

    // some more logic... 

    this.removeEventListener('touchmove', arguments.callee, false); 
}, false); 

Ovviamente questo non è l'effetto che vorresti avere. È anche possibile creare un oggetto e memorizzare un riferimento a un metodo che gestisce l'evento. Se stai cercando di approfondire un po 'di profondità ho trovato utile questo thread: How to removeEventListener on anonymous function?

+0

Questo ha funzionato come un sogno! Grazie mille, così tanto :) – Billie

+0

Grazie, esattamente quello di cui avevo bisogno! – hidace

0

dopo addEventLister sul mio iphone, non posso più rimuoverli. ma questo funziona per me.

var prevent = preventDefault(e) { e.preventDefault(); }; 
//To disable drag 
element.ontouchmove = prevent; 

... 

//To enable it agian 
element.ontouchmove = null;