0

我有一个带有 4 个文本框的订单页面,这些文本框位于 ajax 更新面板中。所有 4 个都有 TextChanged 事件。此页面中的所有控件都没有设置 TabIndex 属性。当我在 textbox1 中输入文本并按 tab 键时,它会导致回发,但下一个焦点不在我想要的 textbox2 上。相反,焦点在页面上。与所有文本框类似。

此订单页面使用母版页。

母版页:

<form id = "form1" runat="server">
<asp:ScriptManager ID="ScriptManager1 " runat="server" />

订单页面:

<asp:content id ="bodycontent" contentplaceholderID="maincontent" runat="server">
// 4 text boxes

</asp:content>

我无法在订单页面中添加另一个表单或脚本管理器标签,因为它错误地说只能有它们的实例。

所以,后面的订单页面代码中没有 FormOrder 或 ScriptManagerOrder,但我想做一些事情。方法。我怎样才能做到这一点。

protected void textbox1_TextChanged(object sender, EventArgs e)
{
   //someFunction();
TextBox tb = (TextBox)FormOrder.FindControl("textbox2");
ScriptManagerOrder.SetFocus(tb);
}
4

3 回答 3

4

尝试这个

protected void textbox1_TextChanged(object sender, EventArgs e)
{
   //someFunction();
   TextBox tb = (TextBox)FormOrder.FindControl("textbox2");
   tb.focus();
}
于 2013-09-25T10:01:19.797 回答
0

对 Tab 使用服务器端控件不是一个好习惯。为什么不使用一些 jQuery/Bootstrap?使用您当前的方法,您可以使用许多无用的帖子/回发,使您的服务器因无用的工作而超载。

于 2013-09-25T11:29:04.903 回答
0

在名为 ie focus.js 的 js 文件中添加以下脚本:

var lastFocusedControlId = "";

function focusHandler(e) {
    document.activeElement = e.originalTarget;
}

function appInit() {
    if (typeof(window.addEventListener) !== "undefined") {
        window.addEventListener("focus", focusHandler, true);
    }
    Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(pageLoadingHandler);
    Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(pageLoadedHandler);
}

function pageLoadingHandler(sender, args) {
    lastFocusedControlId = typeof(document.activeElement) === "undefined" 
        ? "" : document.activeElement.id;
}

function focusControl(targetControl) {
    if (Sys.Browser.agent === Sys.Browser.InternetExplorer) {
        var focusTarget = targetControl;
        if (focusTarget && (typeof(focusTarget.contentEditable) !== "undefined")) {
            oldContentEditableSetting = focusTarget.contentEditable;
            focusTarget.contentEditable = false;
        }
        else {
            focusTarget = null;
        }
        targetControl.focus();
        if (focusTarget) {
            focusTarget.contentEditable = oldContentEditableSetting;
        }
    }
    else {
        targetControl.focus();
    }
}

function pageLoadedHandler(sender, args) {
    if (typeof(lastFocusedControlId) !== "undefined" && lastFocusedControlId != "") {
        var newFocused = $get(lastFocusedControlId);
        if (newFocused) {
            focusControl(newFocused);
        }
    }
}

Sys.Application.add_init(appInit);

使用 Scriptmanager 引用它,如下所示:

<ajax:ScriptManager ID="ScriptManager1" runat="server">
        <Scripts>
            <ajax:ScriptReference Path="~/Js/FixFocus.js" />
        </Scripts>
    </ajax:ScriptManager>

有关更多信息,请查看以下链接:

http://couldbedone.blogspot.in/2007/08/restoring-lost-focus-in-update-panel.html

于 2013-09-25T10:21:49.040 回答