0

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

4

0 回答 0