代码之家  ›  专栏  ›  技术社区  ›  Ran

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

  •  2
  • Ran  · 技术社区  · 15 年前

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

    1. 用户选择文本
    2. 在代码中,打开jquery对话框
    3. 错误:文本被取消选择

    (文本可能在文本区域中,也可能只是页面上的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 回复  |  直到 11 年前
        1
  •  2
  •   Community CDub    7 年前

    jquery对话框将获得用户的焦点(您应该看到对话框上选择的一个按钮)。浏览器只有1个焦点,因此您会丢失它们选择的内容。

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

    我没有任何获取和设置用户选择的示例代码,但是Web搜索应该可以为您找到一些。

    比如:

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

    [编辑(尼古拉):参见 Keep text selection when focus changes 更多代码