0

私は一日中これの実用的な例を探していましたが、実際に機能するものは見つかりませんでした.

私はオンラインで簡単なフィードバック フォームを持っています。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 &amp; 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.

4

2 に答える 2

1

OK、少しイライラするので、これを煮込まなければなりませんでした。多くの試行錯誤の後、WebView だけでは、EditText なしで行っていた動作が許可されないようです。このアプリに EditText は本当に必要ありません。入力タイプのテキストには「Go」ボタンが表示されますが、テキストエリアには表示されないことがわかりました。それらは、それを改行ボタン (青ではなく、フォームを送信しません) に置き換えます。 )、安くてラフですが目的には合っているので、基本的にパラメータrow="1"でテキストエリアを使用することになったので、入力タイプのテキストのように見えます。

<textarea rows="1" name="waiter"></textarea>

「Go」、「Done」、または「Enter」ボタンを非表示にする非常にローテクなソリューション XD。

于 2013-02-06T07:52:26.143 に答える