2016-07-20 50 views
4

我似乎碰到了边缘特定的问题,选择了输入字段中的所有文本。我正在使用angular的ng-focus在控制器中调用一个函数来选择字段中的所有文本。在微软边缘选择焦点上的文本输入的所有内容

function selectAllTextOnFocus($event) { 
    $event.target.select(); 
} 

这个工程除了微软边缘所有的浏览器,这将不会选择在输入字段中的文本罚款。

我也试过另一个jQuery解决方案,除了第一个选择的输入字段。之后,它按预期工作并选择所有文本。

$('input').on('focus', function (e) { 
    $(this).one('mouseup', function() { 
     $(this).select(); 
     return false; 
    }).select(); 
}); 

这只是一个已知的问题与边缘还是我错过了什么?

回答

3

我是Microsoft Edge团队的一名工程师,并查看您所指的问题。从目前来看,你可以在短暂延迟后调用选择方法:

function selectAllTextOnFocus($event) { 
    // See https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8229660/ 
    if (navigator.userAgent.match(/Edge\/(13|14)/)) { 
     return setTimeout($event.target.select.bind($event.target), 10) 
    } 
    $event.target.select(); 
} 

测试两种方法都在这里:https://jsfiddle.net/jonathansampson/xe9x9s7b/

我已经采取了对http://bugs.microsoftedge.com文件a public bug跟踪自由。

+0

虽然这确实可以解决边缘问题,但当您有多个输入字段时,它会在chrome中导致一些意外的行为。如果您选择了一个字段,然后单击另一个窗口,然后再次单击进入Chrome时选择另一个字段,它会尝试选择两个字段的内容。这是一个[plunker](https://plnkr.co/edit/uLdJu8yl1e0FOOz1yAU​​D?p=preview),可以重现此问题。感谢您的快速回复,并提交错误。我会密切关注它。 –

+0

@SpencerMeyer哦,太棒了现在,您可以使用一些用户代理检测来避免陷入这种差距。我会更新答案。 – Sampson

+0

因为我不喜欢这个解决方案,所以我做了一个jsfiddle,并在每个浏览器中使用'setSelectionRange':https://jsfiddle.net/xe9x9s7b/11/ 另外,你不需要10ms作为超时,0是好的,它只是需要排队浏览器,据我所知 – Nicolas

相关问题