Введите 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();
});
Другие вопросы по тегам