Событие ключа калитки - > получить ключ!


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

Ребята! CU Sylvus

2 2

2 ответа:

Не следует использовать Ajaxformcommonentupdatingbehavior, если вы хотите захватить ключи. Это поведение зарезервировано для действий, обновляющих модель компонента формы. Я бы, вероятно, попытался сделать это только на 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!!!')" + "}" + "}" + ");");
        };

Но это не имеет отношения с кроссбраузерными проблемами в обработке событий

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