2013-09-27 11 views
25

Ho associato eventi a elementi diversi e quando li trascino in tutti i browser, ad eccezione di Firefox, funziona come previsto. In Firefox, tuttavia, non funziona affatto. L'unico evento che spara è dragstart e nessuno degli altri eventi viene attivato. Cosa sta succedendo?Perché HTML5 non funziona e trascina il lavoro in Firefox?

+1

Esempio di codice e versione di Firefox per favore? –

+0

Doveva pubblicare la risposta allo stesso tempo ma non ... non so perché. – RandallB

risposta

20

non sto usando jQuery, in modo da rimuovere la parte originalEvent e cambiato il formato di testo (o IE ebbe figli), e funziona:

event.dataTransfer.setData('text', 'anything'); 

Negli altri eventi assicuratevi di chiamare:

event.preventDefault(); 

Oppure salterà su anything.com su alcuni eventi.

+3

con 'event.dataTransfer.setData ('text/html', 'anything')' non salterà su anything.com – pykiss

+0

per chiunque altro stia combattendo con il drag and drop su FF, questo sarà probabilmente rilevante anche per te, sebbene non correlato a questo particolare problema: https: // StackOverflow.it/questions/11656061/event-clientx-mostra-come-0-in-firefox-per-dragend-evento –

+0

Inoltre, è necessario accertarsi in particolare di chiamare preventDefault() sul gestore dell'evento di rilascio per impedire che provi a navigare. Non sono sicuro di cosa stesse pensando Mozilla quando hanno fatto questa terribile implementazione. –

24

Firefox richiede che un utente esegua la funzione dataTransfer.setData nell'evento.

Per voi jQuery utenti, questo significa che il seguente codice dovrebbe risolvere il problema:

function dragstartHandler(event){ 

    event.originalEvent.dataTransfer.setData('text/plain', 'anything'); 

} 

Eventi futuri sullo stesso trascinamento ora fuoco correttamente come previsto. Ovviamente è possibile sostituire gli argomenti setData con altri dati utili.

+1

Usa 'testo' invece di 'testo/semplice' se vuoi che funzioni in IE. Vedi http://stackoverflow.com/questions/12803235/drag-and-drop-not-working-in-ie-javascript-html5 – David

+0

Funziona, ma ad oggi, la documentazione di MDN Drag dice ancora che un DragEvent ha un proprietà dataTransfer. Nessuna menzione di dover fare riferimento a originalEvent. –

+0

@LexLindsey, l'originale è per jQuery come indicato nella risposta. – swiss196

1

È possibile utilizzare questo come riferimento per questa soluzione di domanda riguardante i reindirizzamenti che si verificano su Firefox.

È necessario impedire l'azione predefinita nel metodo di rilascio per risolvere questo problema.

function drop(e) { 
    if(e.preventDefault) { e.preventDefault(); } 
    if(e.stopPropagation) { e.stopPropagation(); } 

    //your code here 

    return false; 
} 

Ho ottenuto questa soluzione da this link.

1

FF ha da tempo problemi con il mangiare determinati eventi del mouse che hanno origine da elementi con overflow impostati su auto o scorrimento.

Nel mio caso, ho avuto una libreria ben utilizzata per il trascinamento della selezione che ha funzionato perfettamente negli esempi e nella mia app su ogni browser ma Firefox. Dopo aver scavato attraverso i biglietti relativi a questo, ho trovato una soluzione che ho pienamente credito per un collaboratore di questo biglietto https://bugzilla.mozilla.org/show_bug.cgi?id=339293

che è quello di impostare -moz-user-select: nessuno

sull'elemento scorrere essendo trascinato da Ha risolto il mio problema particolare.

Problemi correlati