首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wicket key event -> get key!

Wicket key event -> get key!
EN

Stack Overflow用户
提问于 2010-07-30 15:54:33
回答 2查看 3.7K关注 0票数 2

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

伙计们!CU Sylvus

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-02 16:25:15

多亏了Google和Firebug,我找到了解决方案。

代码语言:javascript
复制
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}" +
          "}");
    }
});
票数 0
EN

Stack Overflow用户

发布于 2010-07-30 21:35:23

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

代码语言:javascript
复制
    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的解决方案:

代码语言:javascript
复制
        @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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3369594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档