2010-02-02 39 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){ 做任何你喜欢 }