使用调用函数在dblclick事件中选择带有mouseup事件的文本

时间:2014-06-20 16:49:23

标签: javascript jquery getselection

我查找了jquery select text事件,并找到了this example。 在此示例中,mouseup事件工作以及dbclick事件。

我使用返回值为此代码添加一个函数,但现在dbclick不起作用。 jsFiddle

  

if(!window.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();
    });
});

2 个答案:

答案 0 :(得分:1)

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

只需设置一个setTimeout()即可让它也能用于dblclick。

答案 1 :(得分:0)

导致问题的陈述是这样的:让我们称之为“问题陈述”:if (selectedText != '') {

在原始代码中,一旦满足此条件,程序就会输出警报。所以踩过两个代码......

您单击:

  • 原始代码到达问题陈述,并且在未选择任何内容时不输出警告

  • 您的代码到达问题陈述并且不会返回值,因为问题陈述失败,但是您的警报声明始终执行。

因此,在原始代码中,可能看起来函数是在doubleclick上调用但不是单击。这不是真的,它总是被执行。但是现在使用浏览器,“双击”会突出显示空格或字符之间的字符串,因此(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(); 在绑定功能之外,因此关闭警报后不会删除选择。