Wicket key event -> получить ключ! - PullRequest
2 голосов
/ 30 июля 2010

еще один вопрос: я создал поле ввода и добавил AjaxFormComponentUpdatingBehavior ("onkeyup").Теперь я хочу выполнить некоторый код, только если нажата правая клавиша (пробел).Как я могу получить последнюю нажатую клавишу?Я думал, что он будет сохранен в атрибуте target, но я не смог найти его там ... Есть ли простой способ решить эту проблему?

Спасибо, ребята!CU Sylvus

Ответы [ 2 ]

1 голос
/ 30 июля 2010

Вы не должны использовать AjaxFormComponentUpdatingBehavior, если вы хотите захватить ключи.Это поведение зарезервировано для действий, которые обновляют модель компонента формы.Я, вероятно, попытался бы сделать это только на javascript, особенно если вы используете фреймворк javascript, такой как mootools или prototype.Вот пример кода для 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 недоступна, вот решение только для калитки:

        @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!!!')" + "}" + "}" + ");");
        };

но это не касается кросс-браузерных проблем при обработке событий

0 голосов
/ 02 августа 2010

Я нашел решение, благодаря 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}" +
          "}");
    }
});
...