2010-09-03 84 views
1

我有一個頁面,通過AJAX分頁,所有自定義表格列表。分頁工作正常,但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> 

我怎樣才能確保每當我按了將要提交的任何形式的輸入我的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

雖然你的代碼似乎是正確的,但它不能應用於我的示例,因爲它使用了actionListener =「#{propostaBean.search}」指定的JSF操作偵聽器。在你的情況下,你不會調用動作監聽器,只提交表格 – 2010-09-05 11:58:49

+1

你的actionListener將被調用這個腳本。請注意,在這種情況下,您應該指定提交者ID爲您的commandLink。這將通過f:ajax調用附加的事件函數。 – 2010-09-05 13:20:32