2009-05-21 7 views
16

questa è una domanda specifica, quindi vado subito al punto.Come disabilitare temporaneamente la selezione del testo usando JavaScript?

Sto lavorando a una breve e semplice procedura di trascinamento della selezione per parte di un'applicazione Web, e anche se il bit di trascinamento funziona bene, il sito diventa molto brutto durante l'operazione perché il browser continua a operazione predefinita e funziona sulla selezione del testo.

Ho provato alcune soluzioni che riguardano principalmente il ritorno false dagli eventi mouse o clic e sebbene disabilitino la selezione del testo in alcuni browser, sembrano anche disabilitare completamente l'evento mouseup, rovinando il bit "drop" del script e lasciando questa icona perma-floating che gira intorno al mouse-- non è divertente.

Non voglio veramente che la selezione del testo sia sparita del tutto, voglio solo suggerire che il browser ... non lo faccia durante il trascinamento, se questo ha senso. Poiché conosco l'area interessata (ci sono iframe coinvolti) posso facilmente applicare una proprietà agli elementi interessati, ecc. Posso inserire il codice se necessario, ma sto cercando più di una soluzione generale. Poiché questa è solo una cosa dell'estetica, sto cercando una soluzione che funzioni nella maggior parte dei browser, non è poi così cruciale.

Grazie!

+0

... e l'attacco dei titoli ridondanti inizia, dovrei calciare me stesso.^_^Devo davvero imparare che "programmaticamente" è implicito qui. –

risposta

18

Nei browser W3C, è possibile chiamare il metodo sull'oggetto event. L'equivalente IE è impostare returnValue su false.

function stopDefault(e) { 
    if (e && e.preventDefault) { 
     e.preventDefault(); 
    } 
    else { 
     window.event.returnValue = false; 
    } 
    return false; 
} 

EDIT: appena riletto la domanda e si potrebbe anche voler evitare che l'azione di default nella parte del codice che gestisce il trascinamento reale, e non solo al mousedown iniziale o fare clic su.

+0

Funziona, ma sembra che uccida l'evento mouseup. C'è un modo per rilevare quando il pulsante è stato rilasciato dopo aver fatto questo? –

+0

L'evento mouseup è collegato all'oggetto da trascinare? In tal caso, prova a collegarlo al documento o alla finestra. Attaccalo durante l'evento mouse sull'oggetto drag e poi nel gestore mouseup, staccalo di nuovo. Inoltre, b/c il gestore verrà eseguito nel contesto dell'oggetto documento, sarà necessario essere creativi mantenendo un riferimento all'oggetto di trascinamento. – Bryan

+0

Alla fine ho funzionato. Stavo iniziando il trascinamento in un iFrame e quindi disegnando l'oggetto sotto il mouse nel riquadro del contenitore. (Lo scopo di questo è di "rilasciare" l'oggetto su un'altra cornice, divertente divertimento). Quindi, invece di ascoltare il mouseup nell'iframe di partenza, avevo bisogno di ascoltare un mouse in tutti i frame, incluso il genitore. (L'ascolto di iFrame risponde chiamando la funzione di gestione delle cadute del genitore con la loro posizione, ecc.) Funziona, e sembra andare bene e dandy con tutti i browser. Grazie mille! –

0

per quanto ne so, l'elemento trascinato deve essere posizionato su altri elementi sotto il puntatore del mouse. Se si muoverà con il puntatore del mouse, impedirà qualsiasi selezione sulla pagina.

+1

Questo non sembra essere vero. Il metodo che sto usando è un metodo fantasma, creo una copia fittizia dell'oggetto per trascinarlo, e in realtà non viene rimosso dalla vecchia pagina finché una goccia non ha avuto successo. –