打开jQuery对话框时如何保留文本选择

时间:2009-05-05 13:21:54

标签: javascript jquery html selection

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

  1. 用户选择文字
  2. 在代码中,打开一个jQuery对话框
  3. BUG:文本未被选中
  4. (文字可以在textarea中,也可以只是页面上的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! 
    

    谢谢!

1 个答案:

答案 0 :(得分:2)

jQuery对话框将获取用户的焦点(您应该看到对话框中选择的其中一个按钮)。浏览器只有1个焦点,所以你会失去他们选择的任何东西。

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

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

类似的东西:

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

[编辑(Nickolay):请参阅Keep text selection when focus changes了解更多代码]