【问题标题】:How to preserve text selection when opening a jQuery dialog打开 jQuery 对话框时如何保留文本选择
【发布时间】:2009-05-05 13:21:54
【问题描述】:

使用 jQuery 的对话框我遇到了以下怪癖(在 FF3 中测试):

  1. 用户选择文本
  2. 在代码中,打开一个 jQuery 对话框
  3. BUG:文本未被选中

(文本可以在文本区域中,也可以只是页面上的 HTML)

所以,对我来说,这似乎是一个有趣(且令人讨厌)的错误或怪癖,但也许对此有一个很好的解释。 而我最感兴趣的是,打开对话框后如何保留这个文本选择?

这里有一些代码:

function getSelectedText() {
 var t;
 if (d.getSelection) t = d.getSelection();
 else if(d.selection) t = d.selection.createRange();
 if (t.text != undefined) t = t.text;
 if (!t || t=='') {
  var a = d.getElementsByTagName('textarea');
  for (var i = 0; i < a.length; ++i) {
   if (a[i].selectionStart != undefined && a[i].selectionStart != a[i].selectionEnd) {
    t = a[i].value.substring(a[i].selectionStart, a[i].selectionEnd);
    break;
   }   
  }   
 }   
 return t;
}

 $("#dialog").dialog({
    autoOpen: false,
    bgiframe: false,
    height: 60,
    width: 80,
    modal: false,
    show: 'highlight',
    title: 'wc'});
 alert(getSelectedText()); // Text is here      
 $("#dialog").dialog("open");
 alert(getSelectedText()); // Text is not selected here :( damn! 

谢谢!

【问题讨论】:

  • 据我所知,这是正常行为。如果您选择文本,然后单击页面上的任何其他位置,则选择消失。
  • 这不是点击 - 对话框以编程方式打开(使用 setInterval)并且不涉及点击。

标签: javascript jquery html selection


【解决方案1】:

jQuery 对话框将获得用户的关注(您应该会看到在对话框中选择的按钮之一)。浏览器只有 1 个焦点,因此您会丢失他们选择的任何内容。

您应该在执行对话框之前检索用户选择的开始和结束位置,然后在对话框消失后重新选择它。

我没有任何用于获取和设置用户选择的示例代码,但网络搜索应该会找到一些。

类似:

$("dialog").focus(function() {
  // save the selection
}).blur(function() {
  // set the text selection
});

[已编辑(Nickolay):更多代码见Keep text selection when focus changes]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多