如何在UIWebView iOS5中预选contenteditable字段

时间:2011-11-03 19:57:32

标签: javascript uiwebview ios5 contenteditable

首先,我知道只有iOS 5才能解决这个问题 - 我们正在为iOS 5用户提供一项功能,允许使用contenteditable进行Rich Text粘贴。到目前为止,此功能非常有用,我想要做的就是当视图显示将contenteditable字段设置为活动状态时(预先选择它),以便键盘出现并且用户可以立即开始键入。这是我用于UIWebView的本地html文件

<html>
    <body>
        <div id="content" contenteditable="true" style="font-family: Helvetica">PLACEHOLDER</div>
    </body>
</html>

我已经尝试使用一些javascript来完成此操作,使用我发现的用于预选文本输入的教程。即使我试图切换到文本输入字段进行测试,我也无法使用它。这可能是由于我对javascipt缺乏经验所以如果这是解决方案请明确(因为我对javascript完全不熟悉)。

感谢您的帮助

4 个答案:

答案 0 :(得分:7)

现在如果有人想在iOS 6中实现这一点,他可以像这样以编程方式打开iOS键盘,

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    // keyboardDisplayRequiresUserAction available in iOS >= 6 
    if ([webView respondsToSelector:@selector(setKeyboardDisplayRequiresUserAction:)]) {
        webView.keyboardDisplayRequiresUserAction = NO;
    }
}

然后,

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    // Assuming that you're using jquery. If not, use document.getElementById('YourInputElementID')
    NSString *evalStr = [NSString stringWithFormat:@"setTimeout( function(){$('#YourInputElementID').focus();},1000);"];
    [webView stringByEvaluatingJavaScriptFromString:evalStr];
}

这将在1秒后运行此javascript。为了安全起见,您应该在加载聚焦元素时调用聚焦代码。

答案 1 :(得分:4)

很遗憾,您无法在Mobile Safari中执行此操作。我相信Apple选择限制这种情况发生,因为当您访问某些网站时,例如Google,搜索字段会立即得到关注。如果他们去的每个网站,键盘弹出,这对用户来说非常烦人。在桌面上这种行为并不重要,但在移动设备上它非常明显。

相关:Mobile Safari Autofocus text field

答案 2 :(得分:2)

如果您处于点击事件处理程序的上下文中,则可以召唤键盘。

例如

document.body.addEventListener('click', function() {
  content.focus();
}, false);

应该有效

答案 3 :(得分:0)

我在iOS上没有关于contenteditable的信息,但我认为你应该能够简单地创建一个范围并将其添加到选择中。

var input; // your contenteditable element
var range = document.createRange();
range.selectNodeContents(input);

var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);