ASP.NETのWebページでSubmit時に画面をロックする
基本的な考え方は、Submit直前に画面を覆うDIVを作成して画面上のコントロールをクリックできないようにします。DIVタグを利用する場合、IE6の問題でSelectタグが常にトップレベルに表示されてしまうので、Selectタグについてはdisplayをhiddenに設定して表示しないようにしています。
<%@ Page Language="VB" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) System.Threading.Thread.Sleep(3000) End Sub </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server"> <title>無題のページ</title> <style type="text/css"> .guardBackground { background-color:Gray; filter:alpha(opacity=30); opacity:0.3; } </style> <script type="text/javascript"> function DisableScreen() { var tagElements = document.getElementsByTagName('SELECT'); for (var k = 0 ; k < tagElements.length; k++) { tagElements[k].style.visibility = 'hidden'; } var gDiv; gDiv = document.createElement('div'); gDiv.style.position = 'absolute'; gDiv.className = 'guardBackground'; gDiv.style.zIndex = 9999; window.document.forms[0].appendChild(gDiv) guardScreen(gDiv); window.attachEvent("onresize",function(){guardScreen(gDiv);}); window.attachEvent("onscroll",function(){guardScreen(gDiv);}); } function guardScreen(ele) { var left = (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft); var top = (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop); ele.style.left = left+'px'; ele.style.top = top+'px'; ele.style.width = document.documentElement.clientWidth+'px'; ele.style.height = document.documentElement.clientHeight+'px'; } window.attachEvent("onload", function() { var f = window.document.forms[0]; var originalSubmit = f.onsubmit; f.onsubmit = function() { var valid = true; if (originalSubmit) valid = originalSubmit(); if (valid) DisableScreen(); return valid; } } ); </script> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:DropDownList ID="DropDownList1" runat="server"> <asp:ListItem>A</asp:ListItem> <asp:ListItem>B</asp:ListItem> <asp:ListItem>C</asp:ListItem> </asp:DropDownList> <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> </div> </form> </body> </html>
キーの無効化やIE以外の対応などは実装していませんので注意ください。
テストもあまりしていませんのであしらかず。