2012-06-05 24 views
6

Ho il bug più strano che abbia mai incontrato e sono vicino alla fine del mio spirito su questo. Chiunque abbia idee su come eseguire il debug di questo (o qualsiasi soluzione intelligente) sarebbe fantastico.Il cursore di Firefox invisibile, diventa visibile quando si fa clic su qualsiasi altra cosa

Il problema:

Sto facendo un editor WYSIWYG semplice in Firefox utilizzando contenteditable. Il problema appare quando carico il testo da modificare tramite ajax. Prima del caricamento, il cursore appare a posto (per una frazione di secondo) e una volta caricato il testo scompare. Puoi ancora inserire il testo, e il cursore è sicuramente ancora "lì" (una casella di stato mostra la linea/colonna corrente bene), ma il cursore non è visibile e la sovrapposizione di selezione non appare.

Ecco cosa rende questo davvero strano: facendo clic IN QUALUNQUE luogo, su qualsiasi altro elemento dom, su firebug, anche su un'altra finestra, il cursore torna e si comporta come normale. Infatti, l'unica volta in cui il cursore ha qualche problema è all'inizio, quando inizialmente si carica la pagina o si aggiorna. Fare clic in qualsiasi punto all'interno del div contentedtiable non lo risolve - devi fare clic all'esterno per farlo aggiornare.

In questo momento, ho solo bisogno di una soluzione alternativa. Ho provato 500 sapori di $ (someelement) .click o $ (somelement) .focus, ma non replicano completamente un clic "effettivo" da un utente.

Qualcuno ha mai visto qualcosa di simile? Grazie.

+0

Firefox ha avuto e senza dubbio ha ancora enormi problemi con il cursore che scompare in varie circostanze. La cosa migliore che puoi sperare è provare per errore e trovare una soluzione alternativa per il tuo caso particolare. –

risposta

6

Beh, non ho trovato che cosa sta causando il problema, ma ho trovato una soluzione rapida-and-dirty fa il trucco. Applico semplicemente un tag di ancoraggio al DOM, lo focalizzo (usando jQuery .focus), quindi lo rimuovo.

Ho provato .focus molte volte prima, ma l'ho sempre provato su elementi div o li, che non hanno fatto il trucco. Deve essere un tag di ancoraggio. Sospetto che sia perché il tag di ancoraggio ha effettivamente qualche componente visibile al suo focus, che resetta qualcosa nel meccanismo di visualizzazione del cursore interno di firefox.

In entrambi i casi, se stai cercando di risolvere problemi come questo e questo non risolve il problema, guarda la spiegazione di MorganTiley - potrebbe darti dei buoni consigli.

+0

Fantastico. Sono stato alla ricerca di una soluzione a questo problema da secoli. Questo funziona per me. Altre domande e risposte tentano di selezionare un intervallo di testo, ma non funzionava. Grazie. – mkaj

2

Questo perché quando si carica il contenuto, si modifica la struttura dei nodi html e quindi si annulla la selezione (un cursore è solo una selezione compressa). Ti consiglio di provare a reimpostarlo tramite Rangy. Funziona bene in combinazione con jquery. Usa jquery per ottenere il primo elemento nell'area contentEditable, ad es. il primo paragrafo, quindi crea una nuova gamma di rangy e seleziona quel paragrafo (nodo) e collassa per iniziare. Questo metterà il cursore all'inizio del tuo contenuto. Ecco un po 'di codice di massima

$(document).ready(function() { 
    //init rangy 
}); 

function ajaxLoaded { 
    var p = $(".contenteditablediv p:first")[0]; 
    var sel = rangy.getSelection(); 
    sel.collapse(p, 0); 
} 
+0

Sfortunatamente, Rangy non ha risolto il mio problema, anche se la tua spiegazione ha fornito informazioni preziose sulle selezioni. Grazie. –

+0

cosa è successo? puoi dare più contesto? per esempio. qualsiasi altro script che hai in esecuzione sulla pagina o in che modo è configurato l'html? Rangy dovrebbe essere in grado di spostare il cursore ovunque desideri. – MorganTiley

+0

Nella pagina sono presenti altri script, ma mi sono assicurato che tutto il mio codice di selezione/alterazione (il codice rangy che hai postato) si verifichi dopo che tutti gli altri script sono stati completati. Onestamente, il mio problema risiede probabilmente nel profondo del javascript esterno che sto caricando. Dovrò scavare ancora un po '. Ad ogni modo, penso che Firefox dovrebbe essere abbastanza intelligente da essere in grado di resettare il mio cursore in ogni caso, quindi forse questo è un bug che dovrei loggarmi con loro. Apprezzo comunque il tuo contributo. –

Problemi correlati