使用mouseup事件选择文本,使用调用函数选择dbclick事件

Select text with mouseup event and dbclick event with call a function

本文关键字:选择 事件 调用 函数 dbclick mouseup 文本 使用      更新时间:2023-09-26

我寻找jquery选择文本事件,我发现了这个例子。在这个例子中,mouseup事件和dbclick事件一样有效。

我添加一个函数到这个代码返回值,但现在dbclick不工作。jsFiddle

if (!window.James) {James = {};}

James.Selector = {};
James.Selector.mouseup = function (e) {
    var userSelection;
    if (window.getSelection) {
        userSelection = window.getSelection();
    }
    else if (document.selection) {
        // should come last; Opera!
        userSelection = document.selection.createRange();
    }
    var selectedText = userSelection;
    if (userSelection.text) selectedText = userSelection.text;
    if (selectedText != '') {
        return selectedText + '------' + e.pageX + '/' + e.pageY;
    }
}
$(document).ready(function () {
    $(document).bind("mouseup", function (e) {
        alert(James.Selector.mouseup(e))
        window.getSelection().removeAllRanges();
    });
});

我想你的意思是这样的:http://jsfiddle.net/WBLQz/11/

只要设置一个setTimeout(),让它能够为dblclick。

引起问题的语句是这样的:我们称它为"problem statement": if (selectedText != '') {

在原始代码中的

中,一旦满足此条件,程序就输出警报。因此,通过这两个代码…

点击:

  • 原始代码到达问题语句,不输出警报,因为没有选择

  • 你的代码到达问题语句并且不返回值,因为问题语句失败,但是你的警报语句总是执行。

因此,在原始代码中,似乎函数在双击时被调用,而不是在单击时被调用。这不是真的,它总是被执行。但是现在的浏览器,"双击"会突出显示空白或字符之间的字符串,因此(selectedText != '')

您可以在执行警报之前使用一个简单的if语句来修复这个问题

$(document).ready(function () {
    $(document).bind("mouseup", function (e) {
        if (James.Selector.mouseup(e) !== undefined)
        alert(James.Selector.mouseup(e))            
    });
    window.getSelection().removeAllRanges();
});

其中if (James.Selector.mouseup(e) !== undefined)将只执行警报,如果选择的东西,或双击。

请注意我移动了语句:window.getSelection().removeAllRanges();在绑定函数之外,因此在关闭警报后不会擦除所选内容。