gpt4 book ai didi

asp.net - Internet Explorer 11 中的 DefaultButton 和 DefaultFocus

转载 作者:行者123 更新时间:2023-12-04 04:35:04 25 4
gpt4 key购买 nike

我有一个包含 iframe 的 ASP.NET 页面。在该 iframe 内,有一个带有 DefaultFocus 和 DefaultButton 集的表单,如下所示。

<form id="Form1" method="post" runat="server" defaultfocus="txtSearchPhrase" defaultbutton="btnSearch">

在 IE11 中查看此页面时,iframe 内的所有内容似乎都从屏幕左侧移动了大约 100 像素左右。这不会发生在任何其他浏览器中,包括 IE10。

如果我从表单中删除 DefaultButton 和 DefaultFocus,问题就会消失。然后我可以使用 Javascript 手动连接默认按钮和焦点,但由于我有许多不同的页面可能会在 iframe 内呈现,因此必须更改这些页面中的每一个页面并不理想。

有谁知道是什么原因造成的,或者是否有更好的方法来解决它?

最佳答案

我调查了这个,发现了一些有趣的事情。
首先,当您包含 DefaultFocus 时或 DefaultButton在 ASP .NET WebForms 中的表单上,ASP .NET 将自动发出两件事:

  • WebForm_AutoFocus的定义方法。
  • 对此方法的调用,类似于:WebForm_AutoFocus('defaultFocusElementID');它对 DefaultFocus 都执行此操作和 DefaultButton设置,但我不确定为什么它需要为 DefaultButton 执行此操作设置。
  • WebForm_AutoFocus方法尝试调用 scrollIntoView元素上的方法,但前提是浏览器被检测为“非 MS DOM”浏览器。奇怪的是,IE11 不被认为是 MS DOM 浏览器,至少就这种方法而言。所以 scrollIntoView方法旨在在非 IE 浏览器上运行。
    我想有人可能会争辩说这个错误与 scrollIntoView 的实现有关。 IE11 中的方法,但它也可以被视为 MS JS 库中的一个错误,它检测浏览器是否为 MS DOM 浏览器。我不确定 - 无论哪种方式,我都责怪微软。 :)
    我建议不要使用 DefaultFocusDefaultButton从哲学的角度来看,因为这些是 Microsoft 特定的东西,当您可以使您的代码远离 Microsoft 特定的东西时,您通常应该这样做。特别是当使用“微软方式”完全被破坏时。相反,尝试这样的事情(如果您使用的是 jQuery):
    <form data-defaultfocus="search">
    <asp:TextBox ID="search" />
    </form>

    <script type="text/javascript">

    // jQuery on document ready
    $(function() {
    var form = $('form'),
    defaultButtonID,
    defaultFocusID;

    if (form.data('defaultfocus')) {
    defaultFocusID = form.data('defaultfocus');

    $('#' + defaultFocusID).focus();
    }

    if (form.data('defaultbutton')) {
    defaultButtonID = form.data('defaultbutton');

    form.on('keypress', function(event) {
    if (event.keyCode === 13) {
    __doPostBack(defaultButtonID, '');
    }
    });
    }
    });

    </script>
    这不是经过测试的代码,但您明白了。然后你就可以通过使用 data-defaultbuttondata-defaultfocus在你的表单元素上,而不是微软的方式,它实际上会起作用,如果它不起作用,你可以修复它,因为你控制代码!
    我希望这会有所帮助。
    更新
    我找到了 this Microsoft KB article其中讨论了 .NET 4 补丁。此页面上的问题 2 似乎解决了可能是您描述的问题。

    When you access an ASP.NET-based webpage by using Internet Explorer 11, the webpage renders the content incorrectly.

    Note This issue occurs because Internet Explorer 11 is not recognized as Internet Explorer by ASP.NET.


    我还没有尝试过,但似乎这可以解决它。

    关于asp.net - Internet Explorer 11 中的 DefaultButton 和 DefaultFocus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19869435/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com