专注于第二个文本域Wicket

时间:2012-06-04 12:07:55

标签: java wicket form-submit

我有两套搜索文本字段:

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

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

    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);

但这不起作用。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

除非另有说明,否则几乎每个浏览器都会通过回车键上的第一个可用按钮提交当前表单。因此,如果你想使用另一个按钮,你必须使用JavaScript来装饰你的TextField以捕获Enter键,使用适当的Button提交表单(这很重要)返回false。

你可以通过将两个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");
    }

}