2013-08-26 105 views
9

所以我在我的Rails應用程序中有一個可以理解的div,當它突出顯示時,需要能夠在文本上方顯示一個小的彈出窗口。目前我的代碼有效,並在警報中顯示突出顯示的文本。但是,該函數在mouseup上執行,因此當您單擊div以開始鍵入或突出顯示時,會引發空警報。在ContentEditable DIV中獲取所選文本?

這裏是我的代碼:

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?"); 
       }; 
      }); 

如何以免jQuery當用戶點擊執行功能到CONTENTEDITABLE DIV?我只希望它在實際文本突出顯示時執行。

回答

-2

只是檢查,如果選擇爲空:if ($.trim(text) != '') ...

0

有「選擇開始」事件,當用戶開始選擇的時候觸發。沒有選擇結束事件,但您可以在「selectstart」事件觸發後偵聽mouseup事件以確保選擇已經發生。

編輯:

檢查 - HTML Content Editable div: select text event

2

您可以比較window.getSelection().anchorOffsetwindow.getSelection().extentOffset,看看它們是否相等。如果他們是,那麼這只是一個正常的點擊。

1

如果沒有選擇任何內容,以下代碼將返回true。

受@Tarun Dugar啓發。但在所有瀏覽器中都不起作用。以下工作。

window.getSelection().focusOffset == window.getSelection().anchorOffset; 
相關問題