【问题标题】:Access a control in javascript在 javascript 中访问控件
【发布时间】:2010-11-19 00:39:39
【问题描述】:

我有一个我在代码后面创建的控件

    Dim txtdate1 As New TextBox
    txtdate1.ID = "txtdate1"
    cell.Controls.Add(txtdate1)

Cell 是我添加到 gridview 的标题表单元格。

我需要在 javascript 中访问它

var txtdate1 = document.getElementById('txtdate1');

var txtdate1 = document.getElementById('<%=txtdate1.clientID');

如何做到这一点?

这就是单元格的创建方式

Dim cell As New TableCell
Dim row As New GridViewRow(-1, -1, DataControlRowType.Separator, DataControlRowState.Normal)
    row.BackColor = System.Drawing.ColorTranslator.FromHtml("#B5C7DE")
    row.ForeColor = Drawing.Color.White
    If GridView1.Rows.Count <> 0 Then
        GridView1.Rows(0).Parent.Controls.AddAt(0, row)
    Else

    End If

    row.Controls.Add(labelcell)
    row.Cells.Add(cell)

【问题讨论】:

    标签: c# asp.net javascript vb.net visual-studio-2008


    【解决方案1】:

    试试:

    var txtdate1 = $find('<%= cell.FindControl("txtdate1").ClientID %>');
    

    或者当您在代码中动态创建控件时,将客户端 ID 保存到页面的某个属性中,然后呈现该属性。

    首先创建一个类属性:

    Dim txtID As String        'This should be a class property
    

    然后在动态创建控件时,保存ClientID:

    Dim txtdate1 As New TextBox
    txtdate1.ID = "txtdate1"
    cell.Controls.Add(txtdate1)
    Me.txtID = txtdate1.ClientID  'Save the client id to a property
    

    然后在javascript中你可以像这样加载控件:

    var txtdate1 = $find('<%= txtID %>');
    

    【讨论】:

    • 这个问题是单元格也是动态创建的!我将再次编辑我的问题。
    • 然后只需使用页面变量来保存ClientID,(我的答案的第二部分)
    • 我现在收到此错误:在此上下文中无法访问“...txtid”,因为它是“私人”。
    • 创建 txtid 作为类属性是什么意思?也许这就是我做错了
    • 我做了一些不同的事情。我在隐藏字段中设置了 clientid 值。我可以通过 javascript 访问隐藏字段,但奇怪的是,文本框的客户端 ID 与其 ID 相同。但是,它仍然没有找到文本框。知道怎么了??
    【解决方案2】:

    您应该能够结合 ClientID 使用 MS Ajax 的内置 $find 函数。

    var txtdate1 = $find('<%=txtdate1.ClientID %>');
    

    【讨论】:

    • 我得到以下信息:名称'txtdate1'未声明
    • 错误是正确的,因为页面上没有声明控件。您在这里处理的是动态控件,因此您需要进行动态查找。
    • @Y Low- 在这种情况下我将如何使用动态查找?我从来没有听说过。
    • 您需要使用 cell.FindControl("txtdate1") 在单元格子控件集合中找到您要查找的控件。 (检查我的答案)
    【解决方案3】:

    你几乎得到它。实际上,如果您的第二行能够编译,我感到很惊讶。

    var txtdate1 = document.getElementById('<%= cell.FindControl("txtdate1").ClientID %>');
    

    顺便说一句,Javascript 和 jquery 之间是有区别的,并且 OP 从来没有指出 jquery 的存在。

    【讨论】:

    • 这个问题是单元格也是动态创建的!我将再次编辑我的问题。
    • 我指的是其他两个答案,它们用 $find 替换了本机函数。
    • 为什么你认为$find是一个jquery函数?它实际上是一个 ASP.NET AJAX 函数。
    • 对不起,应该更清楚,Y Low 重申了我同样的想法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多