我有一个包含多个文本框的 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 中呈现吗?也许还有另一种方法可以实现我在做什么?谢谢你的帮助!