以编程方式在 iOS 设备(移动 Safari)的输入字段中选择文本

IT技术 javascript iphone html safari ios
2021-01-31 07:07:59

您如何以编程方式选择 iOS 设备(例如运行移动版 Safari 的 iPhone、iPad)上的输入字段的文本?

通常.select()<input ... />元素调用函数就足够,但这在那些设备上不起作用。光标只是留在现有条目的末尾而不进行选择。

6个回答
input.setSelectionRange(0, 9999);

https://developer.mozilla.org/en/DOM/Input.select

这对我有用,但必须包括在相同的输入上停止鼠标向上。
2021-03-14 07:07:59
如果我.focus()在调用之前触发输入,这仅对我有用input.setSelectionRange如果您正在侦听focus输入上事件,请记住考虑无限循环。
2021-03-14 07:07:59
我花了一个多小时玩各种解决方案。调用setSelectionRange()focus处理程序,当你触发的工作.focus()程序,但是当你手动进军iOS上的文本输入,选择不会发生。可以这么说,您需要做的就是setSelectionRange()在 setTimeout 为 0 的范围内调用,无论触发焦点的是什么,它都能按预期工作。
2021-03-27 07:07:59
一个值得一提的问题:如果 textareasreadonly设置属性,这将不起作用
2021-03-29 07:07:59
这在 iPad 或 iPhone 上对我不起作用
2021-04-12 07:07:59

此线程中没有任何内容对我有用,以下是适用于我的 iPad 的内容:

// t is the input field
setTimeout(function() {
    t.setSelectionRange(0, 9999);
}, 1);
非常感谢你!!
2021-03-20 07:07:59
这他妈的把戏!谢谢!与“点击”事件一起使用
2021-04-05 07:07:59

看到这个小提琴:(在输入框中输入一些文本,然后单击“选择文本”)

它在我的 iPod(第 5 代 iOS6.0.1)的输入框中选择文本,打开键盘并显示剪切/复制/建议...菜单

使用普通的javascript。没有用 jQuery 尝试这个

document.getElementById("p1").selectionStart = 0
document.getElementById("p1").selectionEnd = 999

请注意,数字 999 只是一个示例。您应该将这些数字设置为要选择的字符数。

更新:

  • iPod5 - iOS6.0.1 - 工作正常。
  • iPad1 - iOS5.1.1 - 仅选择文本。点击选择一次打开剪切/复制菜单
  • iPad2 - iOS4.3.3 - 仅选择文本。点击选择一次打开剪切/复制菜单

对于最后两个,您可以通过在input元素上触发点击事件来进行试验

更新: (07-10-2013)

  • iPod5 - iOS7.0.2 - 使用链接中的小提琴:在输入框中看不到键入的文本。按选择将我重定向到 facebook.com (??? wtf ???) 不知道那里发生了什么。

更新: (14-11-2013)

  • iOS 7.0.3 :感谢binki更新 的评论.selectionStart.selectionEnd 确实有效。

更新: (15-01-2015)

  • iOS 8.xx:感谢Michael Siebert的评论摘自评论:我必须同时监听焦点和单击事件,然后 setTimeout/_.debounce 才能使其在两种情况下都能正常工作:通过选项卡单击输入或焦点
您知道与其他iOS版本的兼容性吗?它适用于 iOS5 和 iOS4 吗?
2021-03-14 07:07:59
你是我今天的英雄!奇迹般有效!;-)
2021-04-02 07:07:59
在 iOS6 上对我有用,但是 a) 在桌面 Chrome 上不起作用 b) 在禁用文本输入时不起作用:( 我的用例:我生成唯一的 URL 并希望促进共享。
2021-04-03 07:07:59
@barts 我猜你最终会出现在 Facebook 上,因为 jsfiddle 的“分享”菜单一定是乱七八糟的,而且可能是不可见的。在 iPad 上使用 iOS-7.0.3 进行测试时,我最终自己点击了不可见的 Twitter 按钮。我还发现,当我以为我在敲击你的 时<input/>,iPad 认为我在敲击 jsfiddle 的“CSS”窗格(其中我输入的任何内容都是不可见的)。一旦我将点击指向正确的<input/>,您的“选择文本”按钮就可以在 iOS-7.0.3 上完美运行 :-)。
2021-04-04 07:07:59
@andi1984 我在哪里领取英雄徽章?
2021-04-07 07:07:59

很难证明是否定的,但我的研究表明这是 Mobile Safari 中的一个错误。

请注意,focus() 或多或少都有效——尽管它可能需要多次点击才能成功,如果您尝试响应用户点击相关字段,则没有必要,因为点击本身会提供该字段重点。不幸的是,选择()简单地在移动Safari浏览器不起作用。

您最好的选择可能是向Apple提交错误报告

FWIW,它适用于同样基于 WebKit 的 Chrome 桌面和 Android 浏览器。
2021-03-16 07:07:59
我们的测试表明相同。这是移动 Safari 中的错误/缺失功能。
2021-03-29 07:07:59

抱歉,在我之前的帖子中,我没有注意到 Javascript 暗示您需要 Javascript 的答案。

为了使用javascriptUIWebView 中获得您想要的东西,我设法将两个重要的信息拼凑在一起以使其正常工作。不确定移动浏览器。

  1. element.setSelectionRange(0,9999); 做我们想做的事

  2. mouseUp 事件正在撤消选择

因此(使用原型):

    input.observe('焦点', function() {
      this.setSelectionRange(0, 9999);
    });
    input.observe('mouseup', function(event) {
      事件。停止();
    });

诀窍。

马特

我不得不使用focusin而不是专注于这个工作,iOS 7
2021-03-18 07:07:59
我在 iPad 和 iPhone 上使用 iOS 8,来自@DuStorm 的代码(在这个上面的评论)是这里给出的所有答案中唯一对我有用的东西。重申一下,以下内容至少适用于 Chrome 和 Safari 中的 iOS 8: $("input").focus(function () { this.setSelectionRange(0, 9999); return false; } ).mouseup( function () { return false; });
2021-03-26 07:07:59
我们遇到了同样的问题,发现您的解决方案有效 - 但我们使用的是 jquery(实际上是移动设备)。/* 选择填充中的文本 */ $("input").focus(function () { this.setSelectionRange(0, 9999); return false; } ).mouseup( function () { return false; } );
2021-04-09 07:07:59