Введите onkeyup не работает в jsf2
Я переносю приложение из icefaces 1.8 в icefaces 3.2. Это сложное приложение, и у меня проблемы со страницей входа в JSF 2.
на странице у нас было что-то вроде:
<script type="text/javascript">
function onEnter(ev)
{ if(ev==13)
{
document.getElementById('login:linkLogin').onclick();
}
}
</script>
.
.
.
<body onkeyup="onEnter(event.keyCode);">
.
.
.
<ice:commandLink id="linkLogin" action="#{loginBean.auth}" onclick=";encriptPass('#{login.rsaKeyMod}','#{login.rsaPubKey}');">
.
.
.
Это работает на jsf 1.2 + icefaces 1.8 без проблем. Но в jsf 2.1 + icefaces 3.2 я изменил код следующим образом:
<script type="text/javascript">
function onEnter(ev)
{ if(ev==13)
{
document.getElementById('login:linkLogin').onclick();
}
}
</script>
.
.
.
<h:body onkeyup="onEnter(event.keyCode);">
.
.
.
<ice:commandLink id="linkLogin" action="#{loginBean.auth}" onclick=";encriptPass('#{login.rsaKeyMod}','#{login.rsaPubKey}');">
.
.
.
Этот код не будет работать таким образом. Если я нажимаю ввод, форма просто сбрасывается, и метод bean.auth даже не вызывается.
Что мне здесь не хватает. JS ведет себя по-другому в jsf2?
РЕДАКТИРОВАТЬ: Я нашел решение в этой теме: Отправить действие с помощью клавиши ввода Последнее сообщение имеет обходной путь.
1 ответ
Если вы нажмете клавишу ввода, когда форма находится в фокусе, она отправит форму (если у вас есть кнопка отправки) и перейдет по URL, который вы определили в атрибуте действия формы. Вы должны предотвратить это поведение по умолчанию, прослушивая событие submit формы и запуская функцию protectDefault.
$('#someform').submit(function(e) {
e.preventDefault();
});