1

我有 2 组搜索文本字段:

当我尝试使用返回键(Enter)提交时,第一个文本字段工作正常。但是,当输入第二个文本字段并按下返回键时,会执行第一个文本字段。

我尝试将焦点设置到第二个文本字段,如下所示:

    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 键上的第一个可用按钮提交当前表单。因此,如果您想使用另一个按钮,则必须使用 JavaScript 装饰您的 TextField 以捕获 Enter 键,使用适当的按钮提交表单并(这很重要)返回 false。

您可以通过将两个 TextField 分成单独的表单(如果可能的话)来解决此问题,但这只是一个猜测,因为我目前无法尝试。

如果将以下代码添加到 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 回答