iPad并不是在写文本(iPad is not writing text in the <in

2019-07-21 04:19发布

我遇到的麻烦<input>在iPad上运行我的应用程序时场。

在桌面上单击文本框,输入文字,然后点击一个按钮来验证输入。 在iPad上但它打开键盘面板,当你点击它,但文字并不在文本框中显示,当你键入。
为了使事情更离奇,我有一个<textarea>应用程序中的另一部分,它完美的作品。 所不同的是一个是坐在应用程序的顶部,而另一个是在导入的HTML。

应用程序的结构是这样的:



在顶我的主要HTML5页面,其中进口含有3个div的HTML页面。 接着导入其他HTML页面的每个格。 而这些网页有不同内容的每个,包括有问题的输入字段。 事情是这样的:

Main.html
    -> container.html (imported via iframe)
        -> div1 (imports page n-1 via load(url))
        -> div2 (imports page n via load(url))
        -> div3 (imports page n+1 via load(url))

pageN.html
    -> contains the <input> field

对于该代码<textarea>坐在主HTML是这样的:

<form id="formNotes">
    <textarea id="mainTextbox" type="text" onKeyUp="RefreshNote()" onChange="RefreshNote()"></textarea>
</form>

和用于所述代码<input>导入的HTML页面内字段是这样的:

input{
    -webkit-user-select: auto;
}

<form id="formInput">
    <input id="text1" type="text" ontouchstart="OpenKeyboard(this)" onKeyDown="WriteText(this)" onKeyUp="WriteText(this)" onChange="WriteText(this)"></input>
</form>

有一件事我了解,虽然是你需要使用ontouchstart和别人呼的一下功能使用进口HTMLS事件。 但是,在这种情况下,我可以在iPad打开键盘,所以我不知道为什么它不能识别键盘按键的点击,或者为什么它不发送的值在文本框中。

[编辑:]我发现了,为什么我没有收到任何书面文本的理由是因为iPad认为<input>字段不存在(它显示在警报空白,而不是[object Object][object HTMLInputElement] 我不知道为什么,虽然。

[编辑2:]我试图用getElementsByTagNamegetElementsByClassName代替getElementById 。 有了它似乎承认<input>但我还是不能达到的值。

Answer 1:

同时建立了PhoneGap的应用我有同样的问题。 不知道是否是同样的问题,但:

罪魁祸首是-webkit-user-select: none;

这里的演示。

我本来以为禁止用户选择简单地防止各种工具,如放大镜或copy'n'paste按钮展现出来,但事实证明这完全禁用输入。 键盘显示出来上点击输入栏时 - 但仅此而已:什么你键入将在输入字段中显示出来。

卸下-webkit-user-select: none; 或者至少将它更有选择性的伎俩。

而唯一的,现在我在写这个答案终于谷歌提供。 下面是对SO另外一个答案 ;)



Answer 2:

当你动态创建后的输入或负载HTML document.ready调用,jQuery的.live()函数是门票。

所以,而通常你会拥有这样的功能:

$(function () {

    $('#text1').on('keyup', function() {
        // do something
    })
})

会成为:

function doSomething() {
    // do something
}
$(function () {

    $('#text1').live('keyup', doSomething);
})


Answer 3:

这不是一个实际的解决问题的办法,但相当“粗糙”的解决方法。

出于某种原因,该键盘在iPad不发送的值入<input>虽然它的生火的关键事件。 所以我被迫捕捉值,把它们写下来,然后把完整的字符串到文本框中。 换句话说,做同样的工作,键盘会自动做开始!

// Text container
temp = "";

document.addEventListener('keydown', function(event) {

    // Checks if the key isn't the delete
    if(event.keyCode != 8){

       // Converts and writes the pressed key
       temp += String.fromCharCode(event.keyCode);
    }
    else{
       // Deletes the last character
       temp = temp.slice(0, temp.length-1);
    }
}

document.addEventListener('keyup', function(event) {

    // Writes the text in the text box
    document.getElementById("text1").value = temp;
}

此解决方案仅适用于但是字母数字字符。 如果我想使用特殊字符,我需要添加一个开关的情况下为每个单独的密码( charCode工作在iPad上,但它在桌面浏览器古怪行为)。



Answer 4:

另一种解决方法原油(所有字符):

document.addEventListener('keydown', function(e) {
  window.focus()
  $(':focus').focus()
});


文章来源: iPad is not writing text in the