2013-05-30 33 views
1

我看到脚本Select all contents of textbox when it receives focus (JavaScript or jQuery)当它收到焦点时选择文本框的所有内容

不幸的是,当试图为IE10实现它时,我得出结论,焦点在稍后时间被清除,并且防止默认(适用于基于WebKit的浏览器)似乎不起作用。

我设法使它在IE10中正常工作,但它感觉有点肮脏与额外的布尔变种。

(基本)的HTML:

<div id="ContentDiv"> 
    <input type="text" value="default" /> 
</div> 

代码:

$(document).ready(initialize); 

function initialize() { 
    var tmp; 
    $("#ContentDiv").on({ 
     focus: function (e) { 
      //select for all browsers 
      $(this).select(); 
      tmp = true; 
     }, 
     mouseup: function (e) { 
      //reselect for IE10 
      if (tmp) { 
       this.select(); 
       tmp = false; 
      } 
      //chrome still needs this 
      e.preventDefault(); 
     } 
    }, "input:text"); 
} 

例如:jsfiddle

我的问题:有谁知道解决这个选择-ON-一个更清洁的方式焦点问题?

+0

检查此:http://stackoverflow.com/questions/5797539/jquery-select-all-text-from-a-textarea – Arpit

+0

@Arpit纯JavaScript版本似乎工作,不幸的是一旦有一点jQuery被抛出在混合中,它似乎不起作用。请参阅http://jsfiddle.net/nrWep/3/和http://jsfiddle.net/nrWep/4/。 – Destrictor

回答

2

因此,只有使用超时:

http://jsfiddle.net/2BjQv/

$(document).ready(initialize); 

function initialize() { 
    $("#ContentDiv").on({ 
     focus: function (e) { 
      setTimeout(function(){e.target.select();},0); 
     } 
    }, "input:text"); 
} 

似乎在Firefox中小马车。

+0

它工作的很好,但我认为,如果你使用超时,你甚至不需要触发一个自定义事件(见[的jsfiddle(http://jsfiddle.net/2BjQv/1/))。我认为myFocus事件被立即处理并且控件返回焦点事件。如我错了请纠正我。另一方面,我宁愿不使用setTimeout,因为这可能会导致在速度较慢的计算机上出现问题。 – Destrictor

+0

你是对的,如果使用超时,则不需要自定义事件。但我想不到另一种方式没有超时。顺便说一句,在FF中似乎有点错误。 –

+0

好吧,我要让这个开放多一点。如果没有其他人在没有额外的布尔或setTimeout的情况下找到一个好方法,我会给你答案,因为这是一个比当前流行的修复chrome选择方法更简洁的__lot__ :)。 – Destrictor

相关问题