Как остановить обновление страницы при нажатии кнопки ввода в поле rich: inputNumberSpinner? - PullRequest
0 голосов
/ 09 июня 2010

Я использую rich: inputNumberSpinner tag.

Проблема в следующем:

Я установил фокус курсора на поле rich: inputNumberSpinner , затем я нажал кнопку ввода на моей клавиатуре, эта страница времени будет автоматическиrefresh.

Но мне не нужно обновлять страницу, когда я нажимаю кнопку ввода на моей клавиатуре.

Код:

spinnerTagTest.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j" %>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<f:view>
    <html>
      <head>
       <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">              
     </head>
<body>
      <h:form id="SpinnerForm">                                  
              <rich:inputNumberSpinner id="spinnerField" value="" />              
      </h:form>
</body> </html></f:view>

Я также использую rich: hotKey для этого поля inputNumberSpinner.Но страница обновилась.

<rich:hotKey key="return"
             selector="#spinnerField"
             handler="event.stopPropagation();event.preventDefault();
             return false;"/>

И я проверяю другой способ, используя javasccript, но страница обновилась.

Конкретный тег и javascript:

<rich:inputNumberSpinner id="spinnerField"  value="" 
                         oninputkeypress="return stopPageRefresh();"/>

<script type="text/javascript">

    function stopPageRefresh()
    {
        return false;
    }
</script>

Здесь я использую одинпредупреждающее сообщение внутри stopPageRefresh ().
Но я нажимаю кнопку ввода, сначала обновляется страница, а затем отображается предупреждающее сообщение.

Помогите мне об этом.Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 09 июня 2010

Я не эксперт JSF, но думаю, что проблема связана только с клиентским JavaScript.

В нескольких браузерах вы не можете запретить действия по умолчанию , используя onkeypress (в некоторых браузерах это возможно, в некоторых браузерах это единственный способ предотвратить действия по умолчанию). Во всяком случае, это большой беспорядок с большим количеством различий между браузерами.

Следующий код добавит соответствующий обработчик события к spinnerField. Запустите его внутри обработчика событий onload или, по крайней мере, после отображения spinnerField.

if (window.opera)
  document.getElementById("spinnerField").onkeypress = noEnter;
else
  document.getElementById("spinnerField").onkeydown = noEnter;

function noEnter(e) {
  var event = e || window.event;

  if (event.keyCode == 13)
    return false;
}

Обновление: Возможно, вам нужно установить свойство cancelBubble в IE, чтобы полностью запретить отправку при Введите , но я не уверен в этом , Если приведенный выше пример не работает должным образом в продукте Microsoft, замените noEnter на:

function noEnter(e) {
  var event = e || window.event;

  if (event.keyCode == 13) {
    event.cancelBubble = true;
    return false;
  }
}
0 голосов
/ 30 апреля 2011

это можно исправить обновлением библиотеки Richfaces (по крайней мере для RF 3.x). Вы должны исправить источники в РФ и восстановить его. у меня это работает

  1. Скачать исходники RichFaces
  2. Извлеките их и перейдите к файлу, в котором выполняется отправка формы «Щ / inputnumber-вертушка / SRC / главная / ресурсы / орг / RichFaces / RenderKit / html / скрипт / SpinnerScript.js»
  3. комментарий this.edit.form.submit ();

        if (e.keyCode == 13){
        if (this.spinner.required || "" != this.edit.value)
            this.edit.value = this.getValidValue(this.edit.value);
        if (this.edit.form) {
            this.edit.form.submit(); //!!comment it
        }
    }
    

    }

перестроить richfaces

подробности см. Здесь http://achorniy.wordpress.com/2010/11/06/disable-enter-form-submit-fix-inputnumberspinner/

0 голосов
/ 09 июня 2010

Просто я изменяю ваш скрипт, как добавляю одно предупреждение.

<script type="text/javascript">

document.onkeydown=noEnter;
if (window.opera)
      document.getElementById("spinnerField").onkeypress = noEnter;
else
     document.getElementById("spinnerField").onkeydown = noEnter;

function noEnter(e)
{
      alert("start...");
      var event = e || window.event;
      if (event.keyCode == 13)
      {
         event.preventDefault();
         return false;
      }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...