【问题标题】:Select text with mouseup event and dbclick event with call a function选择带有 mouseup 事件的文本和带有调用函数的 dbclick 事件
【发布时间】:2014-06-20 16:49:22
【问题描述】:

我寻找 jquery 选择文本事件,我找到了this example。 在本示例中,mouseup 事件与 dbclick 事件一样工作。

我在这段代码中添加了一个返回值的函数,但现在 dbclick 不起作用。 jsFiddle

如果 (!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();
    });
});

【问题讨论】:

  • 它正在警报,您希望它如何工作?
  • 我只想得到返回值...
  • “e”是返回值!
  • 好的,但是为什么 dbclick 不起作用?
  • 我同意阿明的观点。您当前正在使用 bind("mouseup", ..),因此您的函数似乎正在做它应该做的事情。你想用它做什么?您是否尝试过 console.log 来查看对象中的内容?

标签: javascript jquery getselection


【解决方案1】:

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

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

【讨论】:

  • 我刚想通了,等一下我会更新我的答案!
  • dobare javabo emtehan kon!
  • 这是你需要的吗?
【解决方案2】:

导致问题的语句是这样的:我们称之为“问题语句”: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(); 在绑定函数之外,因此关闭警报后选择不会被删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-05
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 2011-12-16
    相关资源
    最近更新 更多