Событие ключа калитки - > получить ключ!
Еще один вопрос: Я создал поле ввода и добавил AjaxFormComponentUpdatingBehavior ("onkeyup"). Теперь я хочу выполнить некоторый код, только если нажата правильная клавиша (пробел). Как я могу получить последнюю нажатую клавишу? Я думал, что он будет сохранен в целевом атрибуте, но я не смог найти его там... Есть ли простой способ решить эту проблему?
Ребята! CU Sylvus
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}" + "}"); } });