如何防止在html中取消选择模糊(焦点丢失)上的文本

aco*_*che 6 html javascript css jquery

我一直在研究这个简单的声音问题几天,我没有看到任何结果.

简而言之,我的问题如下:我想在一些输入字段中选择文本,将焦点移动到另一个字段(或者通常说一些其他元素),但不会丢失我选择的文本.

这种情况可能对应于一个用例,我在其中选择字段中的文本,右键单击并显示自定义弹出菜单,但不希望失去所选文本的焦点,因为我想对之前的操作做一些操作选定的文字.

一个小的代码测试样本(对于我最初的简单场景 - 这里我强制文本选择当第二个输入字段获得焦点时):

<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
    <input type="text" id="text1" size="20" value="Test1"/>
    <input type="text" id="text2" size="20" value="Test2"/>

    <script>
    $('#text2').focus( function (evt) {
        var target = $('#text1')[0];
        target.select();
        console.log('active/focused element: ' + document.activeElement.id);
    });
    </script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我一直在搜索SO和网络以寻求解决方案,并且如果有任何帮助则没有看到太多.我不确定这是否真的可能(由于模糊和选择丢失以及焦点和选择之间的联系).我看到一个样式属性preventDeselect,在另一个SO答案中 - 这不起作用,我甚至没有这样的文档或浏览器支持.

我正在努力解决这个问题,并希望得到一些帮助:甚至说我根本无法做到这一点,或者可能还有一些方法可以去做.

更新:仅仅是为了记录,我的用户场景,指的是文本选择和上下文菜单,是一个常见的(它让我想到提醒):只需在此页面(或输入类型字段)中选择一些文本,然后右键单击以获取浏览器的默认上下文菜单 - 我的情况不同之处在于我想使用自定义菜单,但与浏览器的上下文菜单具有相似的行为 - 通常允许选择一些文本,剪切/复制选择,在上下文菜单,不会丢失所选文本.所以我认为应该可以用某种方式:)用上下文菜单做所有这些事情,仍然有你的选择.

Abh*_*lks 4

尝试回答你问题的这一部分:

这种情况可能对应于这样一个用例:我在字段中选择文本,右键单击并显示自定义弹出菜单,但不希望失去所选文本的焦点,因为我想对之前的文本执行一些操作选定的文本。

对于这个用例,我创建了一个快速小提琴:http://jsfiddle.net/4XE9a/1/

注意getSelection:我使用@David 的答案中的相同功能。

如果您选择任何文本,然后右键单击输入,则会出现一个自定义弹出菜单。点击“选项1”。您会发现,即使焦点已转移到该锚标记,选择也不会丢失。

但是,对于有关焦点转移到另一个文本框的问题的第二部分,@David 的答案就足够了。

更新:(在您发表评论之后

请参阅此更新的小提琴:http://jsfiddle.net/783mA/1/

现在,当您选择一些文本并右键单击输入时,它将显示带有三个选项的自定义弹出菜单。使用 Tab 进行导航并按空格键或单击突出显示的选项。(由于时间有限,我无法实现向上/向下箭头键,但概念保持不变)

这表明您在评论中提出的问题是,在导航菜单时选择仍然不会丢失。

注意:您希望在视觉上保持选择突出显示,并且在单击其他任何地方时不会丢失选择。请注意,这是不可能的,因为文本选择行为是操作系统实现的。浏览器、html 等在这里不起作用。一旦您单击选择上下文之外的任何位置,文本选择就会丢失。这是因为一旦您单击外部任意位置,系统就会开始等待新的选择。但是,没有文本表面的控件除外。按钮、滚动条箭头等不会导致选择丢失。

要查看此行为,请在小提琴中选择一些文本,然后单击左侧窗格中的任何下拉列表。文本选择不会丢失,即使在视觉上也是如此。

这就是为什么在上面的新小提琴中,我特意使用按钮来演示。