我有以下的jQuery代码(类似于这个问题在Chrome和Safari,在Firefox和IE的作品,但失败)(没有错误,只是不工作)。 任何想法的解决方法吗?
$("#souper_fancy").focus(function() { $(this).select() });
我有以下的jQuery代码(类似于这个问题在Chrome和Safari,在Firefox和IE的作品,但失败)(没有错误,只是不工作)。 任何想法的解决方法吗?
$("#souper_fancy").focus(function() { $(this).select() });
这是导致该选择机会,获得未选择的onmouseup事件,所以你只需要添加:
$("#souper_fancy").mouseup(function(e){
e.preventDefault();
});
$('#randomfield').focus(function(event) {
setTimeout(function() {$('#randomfield').select();}, 0);
});
这工作正常输入型=“文本”元素。 什么样的元素是#souper_fancy?
$("#souper_fancy").focus(function() {
$(this).select();
});
只是防止在鼠标松开默认使文本选择在任何时候都可以打开。 MouseUp事件负责清除文本选择。 然而,通过阻止其默认行为,您无法取消textusing鼠标。
为了避免这一点,得到了文本选择重新工作,你可以在焦点设置一个标志,从鼠标松开阅读并重置它想象中那么未来的MouseUp事件会工作。
$("#souper_fancy").focus(function() {
$(this).select();
//set flag for preventing MOUSEUP event....
$this.data("preventMouseUp", true);
});
$("#souper_fancy").mouseup(function(e) {
var preventEvent = $this.data("preventMouseUp");
//only prevent default if the flag is TRUE
if (preventEvent) {
e.preventDefault();
}
//reset flag so MOUSEUP event deselect the text
$this.data("preventMouseUp", false);
});
尽管这适用于在IE,火狐,Chrome,Safari和Opera选择它,它不会让你通过点击火狐,Chrome和Safari第二次修改。 不能完全肯定,但我认为这可能是由于这3个浏览器重新发布在IE中一个焦点事件,虽然该领域已经具有焦点因而决不让你真正插入光标(因为你重新选择一次的话),而和Opera似乎它没有这样做,所以焦点事件没有得到再次发射,从而光标被插入。
我发现了一个更好的固定在这叠后 ,不存在这样的问题,并在所有浏览器上运行。
这也应该工作,铬:
$("#souper_fancy").focus(function() {
var tempSouper = $(this);
setTimeout(function(){
tempSouper.select();
},100);
});
因为有闪烁,当您使用setTimeout的,还有另外一个基于事件的解决方案。 这样,“焦点”事件附加了“鼠标松开”事件和事件处理程序再次分离本身。
function selectAllOnFocus(e) {
if (e.type == "mouseup") { // Prevent default and detach the handler
console.debug("Mouse is up. Preventing default.");
e.preventDefault();
$(e.target).off('mouseup', selectAllOnFocus);
return;
}
$(e.target).select();
console.debug("Selecting all text");
$(e.target).on('mouseup', selectAllOnFocus);
}
再用线的第一个事件
$('.varquantity').on('focus', selectAllOnFocus);
使用setSelectionRange()
回调的内部requestAnimationFrame()
$(document).on('focus', '._selectTextOnFocus', (e) => {
var input = e.currentTarget;
var initialType = e.currentTarget.type;
requestAnimationFrame(() => {
// input.select() is not supported on iOS
// If setSelectionRange is use on a number input in Chrome it throws an exception,
// so here we switch to type text first.
input.type = "text";
input.setSelectionRange(0, Number.MAX_SAFE_INTEGER || 9999);
input.type = initialType;
});
});
使用setSelectionRange()
代替select()
,因为select()
在移动Safari浏览器无法正常工作(见iOS设备(移动Safari浏览器)编程选择输入字段中的文本 )。
有必要使用等待requestAnimationFrame
选择文本之前,否则元素没有被正确滚动到视图的键盘出现在iOS之后。
当使用setSelectionRange()
是设置输入类型到重要text
,否则可能会引发在Chrome异常(见上INPUT TYPE =“号码”中铬不再允许selectionStart /选定结束 )。
如果有人再遇到这个问题,我在这里得到了一个纯粹的JS解决方案,它是(目前)对含所有的浏览器工作。 移动
<input type="text" value="Hello world..." onFocus="window.setTimeout(() => this.select());">
(不包括的setTimeout()它不工作的Safari浏览器,移动Safari和MS边)