私は一日中これの実用的な例を探していましたが、実際に機能するものは見つかりませんでした.
私はオンラインで簡単なフィードバック フォームを持っています。WebView を使用して Android デバイス、特に Nexus 7 で動作するようにセットアップしました (これらのデバイスではホテルでローカルにのみ使用されます)。
問題は、html フィードバック フォームにはさまざまなフィールドセットがあり、ラジオ ボタンのあるものと、テキスト フィールドとテキスト領域のあるものがあります。フォームは郵送で送信され、フォームで呼び出される jquery 検証スクリプトがあります。
<form name="form" method="post" action="feedback_manager/fb_save.php" onsubmit="return validateForm()" >
ユーザーがテキストフィールドに入力すると、ソフトキーボードに紛れもない青い「Go」ボタンがあり、入力が終了したらクリック(またはタッチ)する必要があることを除いて、すべて正常に機能します。次のフォームフィールドセットに移動するのではなく、フォームを自動的に送信します (または、この場合は最初に検証スクリプトを実行します)。
KEYCODE_ENTER ボタンのデフォルトのアクションは、フォームを送信する代わりにユーザーを次のフィールドセットに送ることになっていませんか?
誰かが私が間違っていることを見つけてくれることを期待して、html フォームと webView スクリプトを共有します。
<fieldset>
<legend>Food quality, taste & presentation</legend>
<input id="flavor4" name="flavor" value="excellent" type="radio" />
<label for="flavor4"> Excellent</label><br>
<input id="flavor3" name="flavor" value="good" type="radio" />
<label for="flavor3"> Good</label><br>
<input id="flavor2" name="flavor" value="average" type="radio" />
<label for="flavor2"> Average</label><br>
<input id="flavor1" name="flavor" value="bad" type="radio" />
<label for="flavor1"> Needs improvement</label><br>
</fieldset>
<fieldset>
<legend>Who was your waiter today?</legend>
<input name="waiter" type="text">
</fieldset>
//then another fieldset with radio buttons and so on
テキスト入力がすぐに連続しておらず、ラジオ ボタンやコンボ ボックスと混ざっている可能性がありますか?
ここに私の onKeyDown コードがあります:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((event.getKeyCode() == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack())
{
mWebView.goBack();
return true;
}
if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {
// do nothing
return false;
}
return true;
}
これに関する面白い点は、私の KEYCODE_BACK 条件が正常に機能していることですが、KEYCODE_ENTER ボタンで何もせずにソフト キーボードを閉じるか、次のフィールドに移動してフォームを送信しないようにしたいと考えています。
ここSOで多くの回答を見てきましたが、どれもNexus7で機能していないようです(他のデバイスで実際に試したことはありません)。
要約すると、必要なのは青い「Go」ボタンを何もしないか、次のフィールドに移動することだけです。
助けてください。
**編集**
今朝新鮮な見通しでこれを見ていると、キーを検出するために OnKeyListener を追加してから false を返すこの同様の投稿を見つけました。EditText のキーを入力して、onKey を 2 回押します
mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("http://some.url");
mWebView.setWebViewClient(new virtuoWebViewClient());
mWebView.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_ENTER) {
// do nothing
return false;
}
}
return false;
}
});
しかし、それでも何もありません。「Go」ボタンはまだフォームを送信します:(、誰かが私を別の方向に向けたり、新しいアイデアを共有したりできるなら、私はそれを大いに感謝します.Thx.