【问题标题】:Manage mousedown events with javascript when highlighting and unhighlighting text在突出显示和取消突出显示文本时使用 javascript 管理 mousedown 事件
【发布时间】:2012-01-05 08:03:18
【问题描述】:

我一直在研究一些逻辑来处理用户突出显示的文本。我在 http://mark.koli.ch/2009/09/use-javascript-and-jquery-to-get-user-selected-text.html 找到了 Mark Koli 的一个很好的例子。

我创建了一个工作示例:http://jsfiddle.net/metalskin/43c8h/8/

我对特定实例的代码有如下问题:

  1. 选择一些文字。
  2. 出现对话框。
  3. 关闭对话框。
  4. 现在无需拖动即可单击以清除突出显示的文本。
  5. 出现对话框。
  6. 关闭对话框。
  7. 文本被取消选择。

在我的逻辑中,我没有使用对话框(只是作为示例更简单),我插入了一个带有图像的 div 以允许用户执行操作。

问题是第二次点击确实是为了清除文本,但由于某种原因,浏览器在清除文本之前触发了鼠标向上事件(无论如何在 Firefox 下)。这显然不是弹出对话框的问题,但根据我的逻辑,我最终添加了多个 div,因此文本上有多个浮动图像。

有没有办法确定该事件将导致突出显示的文本被删除?理想情况下,我宁愿在浏览器清除文本后触发事件。

我应该解释一下我如何使用它的用例。

  1. 用户突出显示页面上的文本
  2. 一个图标出现在他们刚刚松开鼠标按钮以突出显示文本的位置
  3. 用户选择图标,这将打开一个表单以输入一些详细信息以标记突出显示的文本(此时图标已删除)
  4. 用户提交表单 (ajax),表单关闭。
  5. 页面显示,突出显示的文本现在不突出显示(但添加了额外的标记)。

  1. 用户突出显示页面上的文本
  2. 一个图标出现在他们刚刚松开鼠标按钮以突出显示文本的位置
  3. 用户单击页面上的其他位置以删除突出显示的文本并删除图标。
  4. 用户提交表单,表单关闭。

选择图标时取消选择所选文本没有问题,但问题是如果他们点击页面的另一部分,它会重新激活鼠标事件并因此双图标(或对话框时在提供的示例中不合适)。

【问题讨论】:

  • 在第 4 步之后的 Firefox 中,对话框不会出现。它只是取消选择文本

标签: javascript dom-events mouseup


【解决方案1】:

给你^_^

http://jsfiddle.net/43c8h/16/

我刚刚更改了这段代码以清除鼠标向上事件的选择。

if (selectedText != '') {
    alert("You selected:\n" + selectedText + "\n");
    window.getSelection().removeAllRanges();
}

或者,如果您想在用户选择文本后保持突出显示,您可以使用相同的 window.getSelection().removeAllRanges(); 代码调用 mousedown 函数来清除选择每次点击鼠标。

【讨论】:

  • 感谢 JackalopeZero,不幸的是,这对我来说似乎很奇怪。我将编辑我的原始问题以使其更清晰,但突出显示的文本为用户提供了浮动图像的上下文。文本必须保持突出显示,直到他们选择不突出显示(如果有意义的话)。
  • 啊,当我发布上一个时,我没有看到你的编辑 JackalopeZero。我会试试看,看看效果如何。我有一种感觉,这就是答案,只是希望我不必弄乱鼠标事件。
  • 只需添加此事件 :) James.Selector.mousedown = function(){ window.getSelection().removeAllRanges(); } $(document).bind("mousedown", James.Selector.mousedown); jsfiddle.net/43c8h/21
  • 感谢 JackalopeZero,与示例完美搭配。我应用它的唯一困难是我不使用绑定,因为我需要事件对象。我想我可以从窗口中获取事件,所以应该没问题。
最近更新 更多