1

2セットの検索テキストフィールドがあります。

リターンキー(Enter)を使用して送信を試みたとき、最初のテキストフィールドは正常に機能しています。ただし、2番目のテキストフィールドを入力してリターンキーを押すと、最初のテキストフィールドが削除されました。

次のように、フォーカスを2番目のテキストフィールドに設定しようとしました。

    secondTextField = new TextField("secondTextField", new Model()){
        @Override
        protected void onComponentTag(ComponentTag tag)
        {
                super.onComponentTag(tag);

                tag.put("onclick", "getelementbyid('"+secondTextField.getMarkupId()+"').focus()");

        } 
    };

    form.add(secondTextField);

しかし、これは機能していません。何か案は?

4

1 に答える 1

2

特に定義されていない限り、ほとんどすべてのブラウザーは、Enter キーの最初の使用可能なボタンによって現在のフォームを送信します。したがって、別のボタンを使用する場合は、TextField を JavaScript で装飾して Enter キーを取得し、適切なボタンを使用してフォームを送信し、(これは重要です) false を返す必要があります。

2 つの TextField を別々の Form に分離することでこれを回避できるかもしれませんが (可能であれば)、現時点では試すことができないため、これは推測に過ぎません。

次のコードを TextField に追加すると、Enter キーがフォーム送信をトリガーするのを防ぎます。特定のボタンで送信するように調整する必要があります。

/**
 * Behavior that traps the enter key press
 *
 * @author ivaynberg
 */
public class EnterKeyTrap extends Behavior implements IHeaderContributor {

    private static final long serialVersionUID = -410239548482332706L;

    @Override
    public void onComponentTag(Component component, ComponentTag tag) {
        tag.put("onkeydown", "return ekt(event)!=13");
    }

    public void renderHead(IHeaderResponse response) {
        response.renderJavaScript("function ekt(e){if(typeof(e.keyCode)==\"undefined\"){return e.which;}else{return e.keyCode;}}", "EnterKeyTrap");
    }

}
于 2012-06-06T14:26:21.827 に答える