これを調べていて、興味深いことがわかりました。
まず、ASP .NET WebForms のフォームにDefaultFocus
またはを含めると、ASP .NET は次の 2 つのものを自動的に発行します。DefaultButton
- メソッドの定義
WebForm_AutoFocus
。
- このメソッドの呼び出しは次のようになります。と設定
WebForm_AutoFocus('defaultFocusElementID');
の両方に対してこれを行いますが、設定に対してこれを行う必要がある理由はわかりません。DefaultFocus
DefaultButton
DefaultButton
メソッドは要素のメソッドWebForm_AutoFocus
を呼び出そうとしますがscrollIntoView
、ブラウザーが「非 MS DOM」ブラウザーとして検出された場合のみです。奇妙なことに、少なくともこのメソッドに関する限り、IE11 は MS DOM ブラウザーとは見なされません。そのため、メソッドはIE 以外scrollIntoView
のブラウザーで実行するように設計されています。
バグは IE11 でのメソッドの実装にあると主張できると思いますがscrollIntoView
、ブラウザーが MS DOM ブラウザーであるかどうかを検出する MS JS ライブラリーのバグと見なすこともできます。どちらにしても、Microsoft のせいです。:)
これらはマイクロソフト固有のものであるため、哲学的な観点からandを使用しないことをお勧めします。また、コードをマイクロソフト固有のものから遠ざけることができる場合は、通常は使用する必要があります。特に「マイクロソフトのやり方」を使うと完全に壊れてしまいます。むしろ、次のようなことを試してください (jQuery を使用している場合)。DefaultFocus
DefaultButton
<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>
これはテストされたコードではありませんが、アイデアは得られます。次に、Microsoft のやり方ではなく、フォーム要素でdata-defaultbutton
anddata-defaultfocus
を実行して使用することができます。実際に機能し、機能しない場合は、コードを制御できるため、修正できます。
これが役立つことを願っています。
アップデート
.NET 4 パッチについて説明しているMicrosoft KB の記事を見つけました。このページの問題 2 は、あなたが説明した問題に対処しているようです。
Internet Explorer 11 を使用して ASP.NET ベースの Web ページにアクセスすると、Web ページのコンテンツが正しく表示されません。
注:この問題は、Internet Explorer 11 が ASP.NET によって Internet Explorer として認識されないために発生します。
まだ試していませんが、これで治りそうです。