2013-08-26 21 views
9

Quindi ho un div contenteditabile nella mia app Rails e devo essere in grado di visualizzare un piccolo popup sopra il testo quando è evidenziato. Attualmente ho un codice che funziona e visualizza il testo evidenziato in un avviso. Tuttavia, la funzione viene eseguita su mouseup, quindi quando si fa clic sul div per iniziare a digitare o evidenziare, si genera un avviso vuoto.Ottieni il testo selezionato in DIV ContentEditable?

Ecco il mio codice:

function getSelected() { 
      if (window.getSelection) { 
       return window.getSelection(); 
      } 
      else if (document.getSelection) { 
       return document.getSelection(); 
      } 
      else { 
       var selection = document.selection && document.selection.createRange(); 
       if (selection.text) { 
        return selection.text; 
       } 
       return false; 
      } 
      return false; 
     }; 
$("#content-create-partial").bind("mouseup", function(){ 
       var text = getSelected(); 
       if(text) { 
        console.log(text); 
       } 
       else{ 
        console.log("Nothing selected?"); 
       }; 
      }); 

Come posso evitare jQuery di eseguire la funzione quando l'utente fa clic sul div contentEditable? Voglio solo che venga eseguito quando il testo attuale è evidenziato.

risposta

-2

Basta controllare se la selezione è vuota: if ($.trim(text) != '') ...

0

C'è evento "selectstart" che spara quando l'utente avvia la selezione. Non è presente alcun evento di fine selezione ma è possibile ascoltare l'evento mouseup dopo l'evento "selectstart" per assicurarsi che la selezione si sia verificata.

Edit:

Check - HTML Content Editable div: select text event

2

È possibile confrontare window.getSelection().anchorOffset e window.getSelection().extentOffset per vedere se sono uguali. Se lo sono, allora era solo un normale clic.

1

Quanto segue verrà restituito true se non è selezionato nulla.

Ispirato da @Tarun Dugar. Ma non ha funzionato in tutti i browser. Il seguente ha funzionato.

window.getSelection().focusOffset == window.getSelection().anchorOffset; 
Problemi correlati