Wicket关键事件 - >得到钥匙!

时间:2010-07-30 07:54:33

标签: events key wicket

还有一个问题: 我创建了一个inputfield并添加了一个AjaxFormComponentUpdatingBehavior(“onkeyup”)。现在我想只在按下右键(空格键)时执行一些代码。 我怎么能得到最后一个按键?我以为它会存储在目标属性中,但我找不到它......有没有简单的方法可以解决这个问题?

Thx伙计们! CU Sylvus

2 个答案:

答案 0 :(得分:1)

如果要捕获密钥,则不应使用AjaxFormComponentUpdatingBehavior。此行为保留用于更新表单组件模型的操作。我可能会尝试单独使用javascript,特别是如果你使用像mootools或原型的javascript框架。以下是mootools的一些示例代码(无需将其发送到服务器):

    this.add(new TextField<String>("textField").add(new AbstractBehavior(){

        private static final long serialVersionUID = 1L;
        private Component component;

        @Override
        public void bind(final Component component){
            this.component = component.setOutputMarkupId(true);
        }

        @Override
        public void renderHead(final IHeaderResponse response){
            response.renderOnDomReadyJavascript(
                "$('" + this.component.getMarkupId() + "')" +
                    ".addEvent('keyup',function(event){" +
                        "if(' '==event.key){" +
                            "alert('you pressed space!!!')" +
                        "}" +
                    "}" +
                ");");
        };

    }));

如果没有可用的js库,这里只是一个wicket-only解决方案:

        @Override
        public void renderHead(final IHeaderResponse response){
            response.renderJavascriptReference(WicketEventReference.INSTANCE);
            response.renderOnDomReadyJavascript("Wicket.Event.add('"
                + this.component.getMarkupId()
                + "',onkeyup',function(event){" + "if(' '==event.key){"
                + "alert('you pressed space!!!')" + "}" + "}" + ");");
        };

但这并不涉及事件处理中的跨浏览器问题

答案 1 :(得分:0)

我找到了解决方案,感谢Google和Firebug。

searchInput.add(new AbstractBehavior() {
    private static final long   serialVersionUID    = 1L;
    private Component           component;

    @Override
    public void bind(final Component component) {
        this.component = component.setOutputMarkupId(true);
    }

    @Override
    public void renderHead(final IHeaderResponse response) {
        response.renderJavascriptReference(WicketEventReference.INSTANCE);

        response.renderOnDomReadyJavascript("document.getElementById('" +
          this.component.getMarkupId() + "').onkeyup=function(event){\n" +
          "if(32==event.keyCode){\n" + "alert('you pressed space!!!')" + "\n}" +
          "}");
    }
});