2010-09-03 6 views
1

У меня есть страница, которая имеет список таблиц через разбиение на страницы AJAX, все обычаи. Pagination работает правильно, но клавиша Enter очищает значения ввода формы вместо отправки. Моя кнопка отправки создает сообщение AJAX, которое заставляет таблицу повторно выполнять и повторно выполнять.JSF2: Отправить форму AJAX

Как я могу убедиться, что все входы формы обрабатывают кнопку «Ввод» и представляют форму AJAX?

Это моя кнопка отправки:

<f:ajax execute="@form" render=":formlistproposta" onevent="showProgress"> 
    <h:commandLink styleClass="link" value="#{msg.menu_search_top_all}"  
       actionListener="#{propostaBean.search}" onclick="clearForm();"> 
    </h:commandLink> 
</f:ajax> 

Как я могу убедиться, что всякий раз, когда я нажимаю клавишу Enter на любом из входных виде в мой AJAX для будет представлен?

ответ

2

Я решил ее с помощью JQuery, похожей на @ mmanco решения которого:

$('form input[type=text]').die('keydown').keydown(function(e){ 
    if(e.keyCode == 13) { 
     $('form\\:submitButton').click(); 
     return false; 
    } 
}); 
2

Прежде всего, поведение, которое вы описываете, верное. В простой HTML-странице при нажатии клавиши Enter внутри формы будет нажата первая кнопка. Вероятно, в вашем случае кнопка <input type="reset"/> является первой в форме.

Я использовал prototype для этого.

Ниже приведен пример сценария, который будет обрабатывать данные формы при нажатии клавиши Enter:

var FormSubmissionHandler = Class.create({ 
    initialize: function(formId, submitterId) { 
     this.form = $(formId); 
     this.submitter = $(submitterId); 
     Event.observe(this.form, 'keypress', this.onKeyPress.bindAsEventListener(this)); 
    }, 

    onKeyPress: function(event) { 
     var code = event.keyCode; 
     var element = Event.element(event); 
     if(code == Event.KEY_RETURN) { 
      var nodeName = element.nodeName; 
      var isSelect = nodeName == 'SELECT'; 
      var isTextArea = nodeName == 'TEXTAREA'; 

      if(!isSelect && !isTextArea) { 
       Event.stop(event); 
       this.submitter.click(); 
      } 
     } 
    } 
}); 
+0

Хотя ваш код кажется правильным, он не может быть применен к моему примеру beacuse JSF-прослушивателя действий, заданного с помощью actionListener = "# {propostaBean.search}". В вашем случае вы не будете называть слушателя действий, только отправьте форму –

+1

. Ваш ActionListener будет вызываться с помощью этого скрипта. Обратите внимание, что вы должны указать идентификатор отправителя в этом случае свою командуLink. Это вызовет присоединенную функцию события через f: ajax. –

Смежные вопросы