如何在iOS设备上通过编程的方式选择输入字段中的文本,例如在运行移动Safari的iPhone或iPad上?
通常可以在<input ... />
元素上调用.select()
函数即可完成选择,但在这些设备上无法实现。在这种情况下,光标只会停留在现有条目的末尾,没有任何文本被选中。
如何在iOS设备上通过编程的方式选择输入字段中的文本,例如在运行移动Safari的iPhone或iPad上?
通常可以在<input ... />
元素上调用.select()
函数即可完成选择,但在这些设备上无法实现。在这种情况下,光标只会停留在现有条目的末尾,没有任何文本被选中。
input.setSelectionRange(0, 9999);
input.setSelectionRange
之前,对输入框触发 .focus()
才能使它起作用。如果你正在监听输入框的 focus
事件,请记得考虑无限循环的情况。 - allieferrreadonly
属性,这种方法将无法生效。 - JayPeafocus
处理程序中调用 setSelectionRange()
可以在通过编程方式触发 .focus()
时有效,但是当你手动在 iOS 上点击文本输入框时,选择操作不会发生。简单来说,你只需要在一个 setTimeout 中调用 setSelectionRange()
,并将时间设置为 0,无论是什么触发焦点,它都可以按预期工作。 - user2609094我在此线程中尝试过所有方法都没有用,以下是适用于我的iPad的方法:
// t is the input field
setTimeout(function() {
t.setSelectionRange(0, 9999);
}, 1);
点击这个fiddle链接:(在输入框中输入一些文本,然后单击“选择文本”)
它可以在我的iPod上(第5代iOS6.0.1)选择输入框中的文本,打开键盘并显示剪切/复制/建议菜单。
使用普通JavaScript。没有尝试过使用jQuery。
document.getElementById("p1").selectionStart = 0
document.getElementById("p1").selectionEnd = 999
.selectionStart
和 .selectionEnd
确实有效。更新:(15-01-2015)
<input/>
时,iPad认为我在点击jsfiddle的“CSS”面板(在那里我输入的任何内容都是不可见的)。一旦我把我的点击指向了正确的<input/>
,你的“选择文本”按钮在iOS-7.0.3上就完美地工作了 :-). - binki很难证明一个否定的事情,但我的研究表明这是Mobile Safari中的一个漏洞。
请注意,焦点(focus())功能基本可用——尽管可能需要多次点击才能成功,并且如果您正在尝试响应有关字段的用户点击,则不需要焦点功能,因为点击本身会使该字段聚焦。不幸的是,在Mobile Safari中, 选择(select())是根本无法正常工作。
您最好向苹果公司提交一个漏洞报告。
抱歉,在我早先的帖子中,我没有注意到JavaScript意味着你想要JavaScript答案。
为了在UIWebView中使用javascript获取你想要的内容,我已经搜集到两个重要的信息来使其工作。关于移动浏览器不能确定。
element.setSelectionRange(0,9999);
可以实现我们想要的功能。
鼠标弹起事件会撤销所选内容。
因此(使用Prototype):
input.observe('focus', function() { this.setSelectionRange(0, 9999); }); input.observe('mouseup', function(event) { event.stop(); });
就可以解决问题。
Matt
$("input").focus(function () { this.setSelectionRange(0, 9999); return false; } ).mouseup( function () { return false; });
- Aaron Jessenfocusin
而不是 focus
才能使其工作,iOS 7。 - Lucas看起来聚焦(focus)会起作用,但仅当从本地事件直接调用时。使用类似SetTimeout的方法调用聚焦并不会调出键盘。控制iOS键盘非常困难。这并不是一个好的情况。
我为了解决这个问题而疯狂寻找,虽然你们的回答都有所帮助,但这让我又遇到了另一个难题。
客户想让用户能够点击并选择全部内容,同时还要让用户在iPad上使用外部键盘通过“tab”键选择全部内容(是的,很疯狂……)
我解决这个问题的方法是,重新排列事件顺序。首先是焦点,然后是点击,最后是touchstart。
$('#myFUBARid').on('focus click touchstart', function(e){
$(this).get(0).setSelectionRange(0,9999);
//$(this).css("color", "blue");
e.preventDefault();
});
我希望这能帮助到某些人,就像你们无数次帮助了我一样。
以下类似的内容在我使用的Android 2.2自带的Webkit上可以正常工作:
function trySelect(el) {
setTimeout(function() {
try {
el.select();
} catch (e) {
}
}, 0);
}
请参见Chromium 问题32865。
在iPad上,使用iOS 7版本,我唯一能够使这个工作的方法是实际使用 <textarea></textarea>
而不是 <input>
字段。
例如:
<textarea onclick="this.setSelectionRange(0, 9999);">当点击文本区域时,我的文本将被选中。</textarea>
如何防止用户更改文本区域内的文本更加困难,因为如果将 textarea 设为只读,则选择技巧将不再起作用。
input
标签中使用placeholder="xxx"
。这样就可以完成任务了。