4

以下の JavaScript を使用して、入力の最大長に達したときにフォーカスをフォームの次の入力に変更しています。デスクトップではうまく機能しますが、タブレットでは機能しません。現在の入力がフォーカスを失うと、仮想キーボードはそれ自体を閉じ、次の入力ボックスはフォーカスを取得しません。

ネイティブの「次へ」ボタンを使用せずにタブレットの入力フォーカスを変更する方法を知っている人はいますか?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, user-scalable=no, maximum-scale=1.0" />
<title>inpuTest</title>

<script language="JavaScript">
function myCtrl(elmnt)
{
if (elmnt.value.length==elmnt.maxLength)
    {
    next=elmnt.tabIndex
    if (next<document.frmContact.elements.length)
        {
        document.frmContact.elements[next].focus()

        }
    }
}
</script>

<style type="text/css">
form{
    margin:0 auto;
    background-color:#CCC;
    padding:2%;
    border:1px solid #999;
}

form input,textarea{
    width:96%;
}
</style>
</head>
<body>
<form name="frmContact" method="post">
  <strong>1. Your name:</strong> <span class="times_17">(max-lenght 4)</span><br /><br />
  <input name="formName" tabindex="1" value="" placeholder="Name" maxlength="4" type="text" onFocus="this.select()" onkeyup="myCtrl(this)"><br /><br />
  <strong>2. Your email:</strong> <span class="times_17">(required)</span><br /><br />
  <input id="formEmail" name="formEmail" tabindex="2" value="" placeholder="example@mail.it" maxlength="4" type="text" onFocus="this.select()" onkeyup="myCtrl(this)"><br /><br />
  <strong>3. Your number:</strong><br /><br />
  <input name="formWebsite" tabindex="3" placeholder="Only numbers 1234" maxlength="4" type="number" onFocus="this.select()" onkeyup="myCtrl(this)"><br /><br />
  <strong>4. Your comments:</strong> <span class="times_17">(required)</span><br /><br />
  <textarea name="formComment" tabindex="4" id="comment" cols="45" rows="5" class="input2"></textarea>
</form>
</body>
</html>
4

1 に答える 1

2

iPadでそれを行うことはできません。アンドロイドがそうするかどうかはわかりませんが、iPad でもそれを使いたいと思うと思います。Mobile Safari の一部のフォーカス イベントが無視されるのは、Apple の設計のためです。

スタック オーバーフローに関する次の質問を確認できます。

または、アレン・パイクが言っているquoraを見てください:

設計上、Mobile Safari の一部の focus() イベントは無視されます。多くのサイトが不必要に focus() を実行し、キーボードの起動が遅くて邪魔になります。これは、タイムアウトベースの実行ループで作業を行う SproutCore などのフレームワークを使用する場合に特に厄介です。Han Wei の答えは、これを回避する方法をよく見たものです。

アンドロイド用の同等のリンクが見つからなかったのは残念です。それがそこで働いているか、アンドロイドでそのようなことに誰も興味を持っていないようです:)

于 2012-03-29T17:28:30.717 に答える