0

我有几乎与以下帖子完全相同的问题(我尝试了两个答案,但都不起作用),除了我不担心 TabContainer 是否最后在页面上 - 我想阻止页面当包含 tabcontainer 的 updatePanel 被更新时,从上跳或下跳到任何 tabcontainer。(当然,我猜它实际上是一个 TabPanel - 活动的 - 获得焦点,而不是真正的 TabContainer。)

AjaxToolkit:页面上的最后一个 TabContainer 专注于页面加载

正如海报在上面的链接中所说,我没有明确设置任何焦点,所以我不知道为什么焦点被设置到我的 tabPanel。当我调试时,我可以看到 Ajax 加载了一些设置焦点的 javascript。

我想我想要做什么,除非我可以设置一些属性(autofocus=false ?)覆盖正在执行的任何 ajax javascript,以便不会设置焦点。

但是,不知道该怎么做。那个 javascript 源是在某个地方发布的,所以我可以复制它,注释掉焦点指令,然后覆盖吗?

更新

我正在调试 ajax 脚本的发布版本。我没有意识到有可用的调试版本。我在 web.config 中进行了调试,但显然 ScriptManager 也需要 ScriptMode="Debug"; 当我设置它时,我会得到内部 ajax 代码的调试版本。我还没有完成,但我认为现在应该能够找到设置焦点的攻击性代码,而无需我要求它设置任何焦点并覆盖它。完成后我会发布答案。

4

1 回答 1

3

最后通过调试ajax,找到攻击性代码并覆盖它自己修复它。

如果有人有同样的问题,这是 AjaxCotnrolToolkit 版本 4.1.60501.0,下面位于 Tabs.Tabs.js;只需将此脚本粘贴在您的页面上即可停止烦人的自动对焦。

我现在已经完全关闭了它,但是如果你想要的话,当然可以有条件地关闭它。

下面和原始方法之间的唯一区别是注释行。

    Sys.Extended.UI.TabContainer.prototype._app_onload = function (sender, e) {
            if (this._cachedActiveTabIndex != -1) {
                this.set_activeTabIndex(this._cachedActiveTabIndex);
                this._cachedActiveTabIndex = -1;

                var activeTab = this.get_tabs()[this._activeTabIndex];
                if (activeTab) {
                    activeTab._wasLoaded = true;
                    //activeTab._setFocus(activeTab);     // the only change made to this prototype
                }
            }
            this._loaded = true;
        }

编辑:哇,我刚刚注意到这与我在上面发布的原始链接中提供的代码完全相同。我想我一定犯了一些愚蠢的错误,然后才阻止它为我工作。

于 2012-06-22T18:32:31.733 回答