2010-02-02 35 views
1

我在UpdatePanel內有一個Textbox,一個LinkBut​​ton和一個RadioButtonList。點擊按鈕後,UpdatePanel會在單選按鈕列表中顯示匹配的項目。ASP.NET AJAX回發和jQuery

這工作得很好,但我現在需要在TextBox上做同樣的事情OnKeyDown。我試圖取消所有正在進行的AJAX請求,但沒有太多的運氣。首先,在每次按鍵上UpdatePanel回發,所以一次只能更改一個字母。其次,文本框失去了對回發的關注。

我需要顯示正常的列表,但OnKeyDown以及按下按鈕時。這是我的(控制ID縮短)

$('#textBoxId').live('keydown', function(e) { 
    if((e.keyCode >= 47 && e.keyCode <= 90) || e.keyCode == 13) { 
    Sys.WebForms.PageRequestManager.getInstance().abortPostBack(); 
    $('#buttonId').click(); 
    $('#textBoxId').focus(); 
    } 
}); 

感謝您的任何見解。

回答

0

第一步很可能是移動在UpdatePanel外的文本框(和使用RegisterAsyncPostbackControl),其要解決的焦點問題。

爲了解決每次按鍵回發的問題,我過去所做的是觸發一個計時器,以每X毫秒而不是每次更改檢查控件的更改。該流程會是這個樣子:觸發

  1. 文本框的onchange事件
  2. 的UpdatePanel更新
  3. 文本框的onchange事件被清除,計時器設置爲您在X毫秒值變化
  4. 如果值更新後,更新UpdatePanel,定時器重置爲在X毫秒內再次檢查
  5. 如果值沒有更改,則將TextBox的onchange事件重置爲返回到步驟#1

通過這種方式,您可以更好地控制面板更新的頻率。

0

想知道爲什麼你不使用PageMethods?這是非常簡單的方法,並且可以減少加載/處理時間,並且可以非常容易地與jQuery邏輯集成。

$( '#textBoxId')。活( 'KEYDOWN',函數(E){
如果((e.keyCode> = 47 & & e.keyCode < = 90)|| e.keyCode == 13){
PageMethods.MyLogic(OnMLCallComplete); } });

功能OnMLCallComplete(myLogicData){ 做任何你喜歡 }