1

我有一个基于 JQuery 的 单页 Web 应用程序,它具有丰富的基于 Knockout 的网格。

当我双击 Knockout 网格中的一行时,我会加载一个包含所选项目详细信息的虚拟数据页面,当我完成编辑它(或者如果我取消)时,我会返回到网格. 所有这些都发生在一个页面上。

如果我双击网格中的非文本区域,或者将焦点设置到表单中的输入字段,则重新显示网格时一切正常。但是如果我双击一行中的一些文本(如行项目的“名称”),然后立即单击“取消”返回到网格,那么当我重新显示它时,会选择网格的所有 HTML。就好像我在网格中单击并拖动以选择一个巨大的文本区域。

我一直在尝试以编程方式取消选择这个选定的文本,但无济于事。我尝试了以下各种组合:

$(document).focus();
$("#idBody").focus();
$("#idBody").trigger("click");

如果我点击网格外的区域,我会得到我想要的行为。我有哪些选择?

4

1 回答 1

2

双击时的问题是,通过执行该操作,浏览器默认选择光标下的文本,创建一系列选定文本。

工作小提琴示例

通过删除该范围内的选定文本,这解决了我过去同样的问题:

if (window.getSelection) {
  if (window.getSelection().empty) {  // Chrome
    window.getSelection().empty();
  } else if (window.getSelection().removeAllRanges) {  // Firefox
    window.getSelection().removeAllRanges();
  }
} else if (document.selection) {  // IE?
  document.selection.empty();
}

你可以阅读它:

MDN 上的window.getSelection 和 MDN 上DOM 选择

MSDN 中的 removeAllRanges 方法和 MSDN中的HTMLSelection 对象


这个解决方案的功劳归功于这个答案Y 先生


经测试

Windows XP 专业版 2002 Service Pack 3

  • 互联网浏览器 8.0.6001.18702
  • 歌剧 11.62
  • 火狐 3.6.16
  • Safari 5.1.2
  • 谷歌浏览器 18.0.1025.168 m
  • K-Meleon 1.5.4

Windows 7 家庭版服务包 1

  • Internet Explorer 9.0.8112.164211C
  • 歌剧 11.62
  • 火狐12.0
  • Safari 5.1.4
  • 谷歌浏览器 18.0.1025.168 m

Linux Ubuntu 12.04

  • 火狐12.0
  • Chromium 18.0.1025.151(开发人员内部版本 130497 Linux)
于 2012-06-05T22:45:10.067 回答