如何知道用户何时取消选择文本,如果在以前的活动选择单击
How to know when user unselects text if clicking in previously active selection?
我正在研究一个小的文本编辑功能,我需要知道用户何时选择/取消选择文本,以便我可以相应地显示可用的选项。例如:当文本被选中,你可以创建一个链接,使其粗体等。如果没有选择任何文本,则根本不显示这些选项。
我在mouseup
和keyup
事件上使用window.getSelection()
,然后检查isCollapsed
属性的值,以查看是否有活动选择。它有效,但并非在所有情况下都有效。下面是使用JSFiddle进行复制的一些步骤:http://jsfiddle.net/0qqbaqo4/
- 选择一些文本
- 通过单击当前选定文本以外的任何位置来取消选中。
- 结果应该是"There is a active selection: false"。
这行不通
- 选择一些文本
- 通过单击内的任何来取消选中。
- 结果应该是"There is a active selection: false",但它实际上仍然是true。
我在Mac OS上使用Chrome 36和Firefox 31时会遇到这种情况。我还没有在其他浏览器上测试过。
我想也许在mouseup
的文本选择是仍然活动,我应该等待一些其他事件触发,但我没有找到任何
任何帮助将是伟大的,谢谢:)
我最终通过使用removeAllRanges()
函数确保在mousedown
上删除任何选择来解决这个问题。这里的工作示例:http://jsfiddle.net/0qqbaqo4/.
问题是事件没有在正确的时间被触发。所以当你在测试选择状态时,取消选择事件还没有被解决。
一个简单的方法来管理这是有一个延迟的函数调用,使用setTimeout(fn,delay)。一种标准方法是将函数延迟0毫秒,这基本上意味着"在所有当前执行的函数完成之后":$('.editable').on('mouseup keyup', function(e){
var selection = window.getSelection();
setTimeout(function() {
$('#result').text('There is an active selection : ' +
!selection.isCollapsed);
}, 0);
});
可能有一个由jQuery触发的事件总是在解析后触发,但我发现延迟响应通常没有那么多的阅读效果更好。: -)
看到:
http://jsfiddle.net/0qqbaqo4/2/相关文章:
- 检测页面上某个元素中选择(突出显示)或单击的内容
- AngularJs列表ng单击以选择选项转换
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- OpenLayers在悬停时高亮显示功能,并在单击时选择
- 单击时选择2(未选中),显示加载微调器javascript
- 单击OPTGROUP后选择所有子元素
- 如何改变“;尺寸“;单击选择时的选择
- 选择了多个用javascript单击的项目
- 单击选项卡时jquery选项卡选择不起作用
- casperjs-css选择器存在,但当单击它时会引发“”;CasperError:无法在不存在的选择器“”上调度mou
- 如何触发 HTML 选择单击事件(使用选项激活选择下拉列表)
- 从选项选择单击时打开 2 个 URL
- 如何从定义的函数中选择单击的链接
- 选择单击的图元,而不是其父图元
- 如何知道用户何时取消选择文本,如果在以前的活动选择单击
- 根据eq()选择单击事件
- 如何按类选择单击元素的子元素
- 共享IE7中的此问题-无法选择/单击弹出表单下方的任何内容
- 角度 JS,选择单击不调用
- JS循环并选择单击以外的其他输入