複数のテキスト ボックスを含む Web ユーザー コントロールがあります。これらのテキスト ボックスの一部には、javascript クリック イベントがあります。
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="myControl.ascx.vb" Inherits="myControl" ClassName="myControl" %>
<script type="text/javascript">
function textbox1_Click(textbox1, textbox2, textbox3, textbox4) {
//processing
}
function textbox2_Click(textbox1, textbox2, textbox3, textbox4) {
//processing
}
function textbox3_Click(textbox1, textbox2, textbox3, textbox4) {
//processing
}
function textbox4_Click(textbox1, textbox2, textbox3, textbox4) {
//processing
}
</script>
<div>
<asp:TextBox ID="textbox1" runat="server"></asp:TextBox>
<asp:TextBox ID="textbox2" runat="server"></asp:TextBox>
<asp:TextBox ID="textbox3" runat="server"></asp:TextBox>
<asp:TextBox ID="textbox4" runat="server"></asp:TextBox>
</div>
コード ビハインドでは、このようにクリック イベントを追加します。
Partial Class myControl
Inherits System.Web.UI.UserControl
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
textbox1.Attributes.Add("onClick", "textbox1_Click(" & textbox1.ClientID & ", " & textbox2.ClientID & ", " & textbox3.ClientID & ", " & textbox4.clientID & ");")
textbox2.Attributes.Add("onClick", "textbox2_Click(" & textbox1.ClientID & ", " & textbox2.ClientID & ", " & textbox3.ClientID & ", " & textbox4.clientID & ");")
textbox3.Attributes.Add("onClick", "textbox3_Click(" & textbox1.ClientID & ", " & textbox2.ClientID & ", " & textbox3.ClientID & ", " & textbox4.clientID & ");")
textbox4.Attributes.Add("onClick", "textbox4_Click(" & textbox1.ClientID & ", " & textbox2.ClientID & ", " & textbox3.ClientID & ", " & textbox4.clientID & ");")
End Sub
End Class
現在、プレースホルダーを介してこれらのコントロールが大量に追加されているページがあります。
For x as Integer = 0 to 300
Dim newRow As myControl = LoadControl("myControl.ascx")
myPlaceHolder.Controls.Add(newRow)
Next
問題は、このページの IE でのレンダリングが非常に遅いことです。IE9 では、ページのレンダリングに約 10 秒かかります。ユーザー コントロールがページ上で徐々にレンダリングされ、レンダリングが完了するまで IE はほとんど応答しません。IE8 を試してみましたが、さらに遅くなりました。もちろん、Firefox と Chrome はすぐにロードされます。
このパフォーマンスの問題は、clientID を JavaScript 関数に渡すことに直接関係していることがわかりました。クリック イベントへのすべての変数の受け渡しを削除すると、IE で正常に読み込まれます。
Public Class myControl
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
textbox1.Attributes.Add("onClick", "textbox1_Click();")
textbox2.Attributes.Add("onClick", "textbox2_Click();")
textbox3.Attributes.Add("onClick", "textbox3_Click();")
textbox4.Attributes.Add("onClick", "textbox4_Click();")
End Sub
End Class
私はjavascript関数自体でclientIDを取得しようとしました。
var mytextbox = document.getElementById('<%= textbox1.ClientID %>');
これは機能しません。最後に動的に追加されたユーザー コントロールの ID が常に返されます。
これを妥当な時間内に IE でレンダリングできる方法はありますか? たぶん、私がやっていることを達成する別の方法がありますか? 助けてくれてありがとう!