2011-04-18 65 views
0

我想知道是否有人在我的頁面上選擇了文本,因此我可以在其光標所在的位置顯示上下文菜單。但是,如果他們通過雙擊文本選擇文本,我只想顯示它。這可能嗎?如何判斷用戶是否在我的頁面上選擇了文本

我認爲這是可能的,因爲同樣的事情發生在I.E與那個藍色的加速按鈕的東西。

+0

@Trufa,我試過搜索,但是因爲找不到東西,我只能這麼做.. – 2011-04-18 01:59:39

回答

2

這不夠嗎?

http://jsfiddle.net/cLY8r/

下面的代碼,如果你不想跟隨鏈接:

<div id="target"> 
    Double-click here 
</div> 

<script type="text/javascript"> 
$('#target').dblclick(function() { 
    alert('Handler for .dblclick() called.'); 
}); 
</script> 
+0

謝謝@Trufa,這與@James的document.selection結合在一起會讓我確切地得到我想要的。 – 2011-04-18 01:59:04

+0

@βӔḺṪẶⱫŌŔ很高興幫助! – Trufa 2011-04-18 02:01:27

1

,在大多數瀏覽器上運行一個更強大的解決方案:

<div ondblclick="checkForSelectedText(this)">here is some text</div> 

<script type="text/javascript"> 
function checkForSelectedText() { 
    var d = document; 
    var t; 

    // Modern browsers, including IE 6+ 
    if (d && d.selection && d.selection.createRange) { 
    t = d.selection.createRange().text; 
    alert('createRange supported\n' + t); 

    // Others 
    } else if (d.getSelection) { 
    t = d.getSelection(); 
    alert('getSelection supported\n' + d.getSelection()); 
    } 
    return t; 
} 
</script> 

但是不會裏面像的textarea或輸入元件工作對於大多數瀏覽器。下面是一個更普遍的版本:

<div ondblclick="checkForSelectedText(event)">here is some text 
    <input value="and some inside an input"> 
    <textarea>Lorem ipsum in a textarea</textarea> 
</div> 

<script type="text/javascript"> 
function checkForSelectedText(e) { 
    var el = e.target || e.srcElement; 
    var tagName = el.tagName && el.tagName.toLowerCase(); 
    var t; 
    var d = document; 

    // Try DOM 2 Range - most browsers, including IE 6+ 
    if (d && d.selection && d.selection.createRange) { 
    t = d.selection.createRange().text; 
    alert('createRange supported\n' + t); 

    // Otherwise try HTML5 - note that getSelection returns 
    // a string with extra properties 
    } else if (d.getSelection) { 
    t = d.getSelection(); 
    alert('getSelection supported\n' + 
      '\n' + t); 
    } 

    // If didn't get any text, see if event was inside 
    // [email protected]=text or textarea 
    if (t == '') { 

    if (tagName == 'textarea' || 
     (tagName == 'input' && el.type == 'text')) { 
     t = el.value.substring(el.selectionStart, el.selectionEnd) 
     alert('Inside ' + tagName + '\n' + t); 
    } 
    } 
    return t; 
} 
</script> 

的selectionStart和選定結束它可能需要一個表單控件內部的情況多一點的工作,應該有可能是測試。

+0

哦,工作得很好,我已經添加了selectionStart,selectionInProgress和selectionEnd - 非常感謝@RobG,非常感謝! – 2011-04-20 14:51:19

相關問題