Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 焦点更改时保留文本选择_Javascript_Textbox_Focus_Range_Selection - Fatal编程技术网

Javascript 焦点更改时保留文本选择

Javascript 焦点更改时保留文本选择,javascript,textbox,focus,range,selection,Javascript,Textbox,Focus,Range,Selection,我有一个普通的文本框和一个带有文本输入的lightbox 我希望在文本框中保留用户的选择,即使用户关注lightbox的文本输入 在普通文本框中选择文本 开关灯箱 关注lightbox输入 在步骤3,用户的文本选择被丢弃。如何防止这种情况?例如,请参见谷歌文档链接插入灯箱 谢谢:) 更新 OK,因此谷歌文档使用空白页部分的IFRAME,这是它们处理多个选择的方式。类似这样的内容(请原谅讨厌的HTML): //test.html 这是主要部分 函数lightbox(){ document.get

我有一个普通的文本框和一个带有文本输入的lightbox

我希望在文本框中保留用户的选择,即使用户关注lightbox的文本输入

  • 在普通文本框中选择文本
  • 开关灯箱
  • 关注lightbox输入
  • 在步骤3,用户的文本选择被丢弃。如何防止这种情况?例如,请参见谷歌文档链接插入灯箱

    谢谢:)

    更新

    OK,因此谷歌文档使用空白页部分的IFRAME,这是它们处理多个选择的方式。类似这样的内容(请原谅讨厌的HTML):

    //test.html
    这是主要部分
    函数lightbox(){
    document.getElementById('lightbox').style.display='block';
    }
    //frame.html
    这是我的iframe

    iframe中的文本选择独立于lightbox中输入的焦点。因此,如果选择了一些文本“This is my iframe”,则会切换lightbox并将光标放置在输入中,iframe的文本选择将保持不变,而不使用任何javascript

    我正在尝试Nickolay的建议。

    发件人:您必须在模糊上保留选择,并在焦点上恢复选择:

    $("dialog").focus(function() {
      // save the selection
    }).blur(function() {
      // set the text selection
    });
    
    设置选择(从):


    获取选择:

    好的,我终于进入了这一阶段,但我仍然坚持IE vs FF。以上是纯IE——有人有FF指针吗?到底什么东西在Firefox中不起作用?我不明白为什么第一个代码段不会,只是尝试了第二个,它工作了…我的错误-FF执行
    if
    ,MSIE
    else
    @Nickolay我不确定你的解决方案是否有效。请检查此项,文本区域内的选择在失去焦点时不会持续。@Nickolay,可能是我不明白它应该如何工作。即使在焦点消失后,这是否仍能保持选择?请检查这个
    $("dialog").focus(function() {
      // save the selection
    }).blur(function() {
      // set the text selection
    });
    
    $.fn.selectRange = function(start, end) {
      return this.each(function() {
        if(this.setSelectionRange) {
          this.focus();
          this.setSelectionRange(start, end);
        } else if(this.createTextRange) {
          var range = this.createTextRange();
          range.collapse(true);
          range.moveEnd('character', end);
          range.moveStart('character', start);
          range.select();
        }
      });
    };
    $('#elem').selectRange(3,5);