【问题标题】:ASP.NET AJAX postback and jQueryASP.NET AJAX 回发和 jQuery
【发布时间】:2011-01-12 06:42:33
【问题描述】:

我在 UpdatePanel 中有一个文本框、一个 LinkBut​​ton 和一个 RadioButtonList。单击按钮时,UpdatePanel 会在单选按钮列表中显示匹配项。

这很好用,但我现在需要在 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();
  }
});

感谢您的任何见解。

【问题讨论】:

    标签: asp.net jquery ajax postback


    【解决方案1】:

    第一步可能是将 TextBox 移到 UpdatePanel 之外(并使用 RegisterAsyncPostbackControl),这应该可以解决焦点问题。

    为了解决每次按键回发的问题,我过去所做的是触发一个计时器,以每隔 X 毫秒检查一次控件的更改,而不是每次更改。流程看起来像这样:

    1. TextBox 的 onchange 事件被触发
    2. UpdatePanel 已更新
    3. TextBox 的 onchange 事件被清除,定时器设置为在 X 毫秒内检查值的变化
    4. 如果值再次更改,则更新 UpdatePanel,重置计时器以在 X 毫秒内再次检查
    5. 如果 value 没有改变,TextBox 的 onchange 事件被重置以返回到步骤 #1

    这样您可以更好地控制面板的更新频率。

    【讨论】:

      【解决方案2】:

      想知道您为什么不使用 PageMethods 吗?这是一种非常简单的方法,也减少了加载/处理时间,并且可以很容易地与 jquery 逻辑集成。

      $('#textBoxId').live('keydown', function(e) {
      if((e.keyCode >= 47 && e.keyCode PageMethods.MyLogic(OnMLCallComplete); } });

      函数 OnMLCallComplete(myLogicData) { 随心所欲 }

      【讨论】:

        【解决方案3】:

        【讨论】:

        • 这可能会解决焦点问题,但是 System.Windows.Forms 属性与 ASP.NET 有什么关系?
        猜你喜欢
        • 1970-01-01
        • 2012-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多