【问题标题】:Set focus on next textbox/tabindex after autopostback ASP.net C#在自动回发 ASP.net C# 之后将焦点设置在下一个文本框/tabindex 上
【发布时间】:2018-04-19 05:22:30
【问题描述】:

我知道这个问题已经被问过很多次了,但是我找到的每一个解决方案都没有解决我的问题。

在我的页面中,我正在动态创建具有 3 列的多个 GridView,然后将它们添加到我的更新面板中。我用具有 TextChanged 事件和 AutoPostback = true 的 TextBox 填充了第三列。现在,当用户按下选项卡时,将触发 TextChanged 事件。但是焦点消失了。当我按 Tab 时,我希望它移动到下一个文本框,但它就消失了。

我尝试在更新面板上添加UpdateMode="Conditional" ChildrenAsTriggers="false",但没有成功。

我也尝试过使用这个 javascript:

var postbackElement = null;
  function SetFocusToNextControl(newTabIndex)
  {
    for (var i=0;i<=document.form1.elements.length;i++)
    {
        if (document.form1.elements[i].tabIndex == newTabIndex)
        {
          document.form1.elements[i].focus();
          break;
        }
    }
  }
  function RestoreFocus(source, args)
  {
    document.getElementById(postbackElement.id).focus();
    if (document.getElementById(postbackElement.id).type =='text')
      SetFocusToNextControl(document.getElementById(postbackElement.id).tabIndex+1)
  }
  function SavePostbackElement(source, args)
  {
    postbackElement = args.get_postBackElement();
  }
  function AddRequestHandler()
  {
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_endRequest(RestoreFocus);
    prm.add_beginRequest(SavePostbackElement);
  }

当我第一次按下 tab 时它起作用了,TextChanged 事件被触发,并且焦点被设置在下一个文本框上。但是当我第二次按下 tab 时,焦点又消失了。它只工作一次。我该如何解决我的问题?

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    在文本框 TextChanged 事件的最后。

    textbox2.focus();
    

    【讨论】:

    • 这不起作用,因为它只会关注那个特定的文本框。如果 Textbox3 触发了 TextChanged 事件,那么焦点将返回到 textbox2。如果用户决定在 textbox3 外部单击而不是按 Tab 键移动到下一个文本框,它仍然会关注 textbox2。
    猜你喜欢
    • 1970-01-01
    • 2012-10-05
    • 2018-07-18
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多