如何通过JS动态获取用户控件里控件的ID

时间:2022-07-09 00:58:50
我的情况是这样的


    function ChangeValue(p, c) {
        alert(p + "__" + c);
    }


<asp:DropDownList ID="ddlParentCost" runat="server" onchange="ChangeValue('<%= ddlParentCost.ClientID%>','<%= ddlChildCost.ClientID%>')">
</asp:DropDownList>
<asp:DropDownList ID="ddlChildCost" runat="server">
</asp:DropDownList>

上面的这两个控件我是放在用户控件里。
我改变ddlParentCost的时候触发onchange客户端事件,
不过这样写错了,弹出的对话框的信息也不显示控件的id,我查看生成的html代码变成

<select name="SelCostType1$ddlParentCost" id="SelCostType1_ddlParentCost" onchange="ChangeValue('&lt;%= ddlParentCost.ClientID%>','&lt;%= ddlChildCost.ClientID%>')">


请问我要怎么修改

9 个解决方案

#1


不能再 HTML 里面 用<% %>  

你可以在  function ChangeValue(p, c) {

document.getElementById('<%= ddlParentCost.ClientID%>');
document.getElementById('<%= ddlChildCost.ClientID%>');

        alert(p + "__" + c);
    }


#2


引用 1 楼 xiangjing163 的回复:
不能再 HTML 里面 用<% %>  

你可以在  function ChangeValue(p, c) {

document.getElementById('<%= ddlParentCost.ClientID%>');
document.getElementById('<%= ddlChildCost.ClientID%>');

        alert(p + "_……

我没在html写啊,我是在aspx页面里写的,嗨朋友,看好题目

#3


Attributes.Add("oncgange","ChangeValue("+ddlParentCost.ClientID+",...)")

#4


你可换种思路做。点击父下拉为子下拉选值?

#5


下拉列表的ID都是唯一的,有必要再传过去?

#6


你的 onchange="ChangeValue('&lt;%= ddlParentCost.ClientID%>'  有两个问题:

1. 在服务器控件属性中,应该使用绑定表达式 onchange="<%# ..... %>" 这种形式。特别是,当表达式内容比较复杂时,可以采取比较“万能”的做法,把它独立出来。
onchange='<%# GetScript() %>'
protected string GetScript()
{
    return string.Format("alert('{0}');", this.ddlParentCost.ClientID);
}


2. 绑定表达式要想进行计算,你要使用 DataBind() 方法来执行它。
protected void Page_PreRender(object sender, EventArgs e)
{
    this.ddlParentCost.DataBind();
}

#7


嗯,你的是两个参数,在GetScript中按需返回一个javacript就行了。

#8


如何通过JS动态获取用户控件里控件的ID
结贴快了点,没注意看还有回帖

#9


引用 5 楼 nocallstle 的回复:
下拉列表的ID都是唯一的,有必要再传过去?


可不唯一哦,如果你一个页面嵌套多个用户控件的话,他的ID是不一样的

#1


不能再 HTML 里面 用<% %>  

你可以在  function ChangeValue(p, c) {

document.getElementById('<%= ddlParentCost.ClientID%>');
document.getElementById('<%= ddlChildCost.ClientID%>');

        alert(p + "__" + c);
    }


#2


引用 1 楼 xiangjing163 的回复:
不能再 HTML 里面 用<% %>  

你可以在  function ChangeValue(p, c) {

document.getElementById('<%= ddlParentCost.ClientID%>');
document.getElementById('<%= ddlChildCost.ClientID%>');

        alert(p + "_……

我没在html写啊,我是在aspx页面里写的,嗨朋友,看好题目

#3


Attributes.Add("oncgange","ChangeValue("+ddlParentCost.ClientID+",...)")

#4


你可换种思路做。点击父下拉为子下拉选值?

#5


下拉列表的ID都是唯一的,有必要再传过去?

#6


你的 onchange="ChangeValue('&lt;%= ddlParentCost.ClientID%>'  有两个问题:

1. 在服务器控件属性中,应该使用绑定表达式 onchange="<%# ..... %>" 这种形式。特别是,当表达式内容比较复杂时,可以采取比较“万能”的做法,把它独立出来。
onchange='<%# GetScript() %>'
protected string GetScript()
{
    return string.Format("alert('{0}');", this.ddlParentCost.ClientID);
}


2. 绑定表达式要想进行计算,你要使用 DataBind() 方法来执行它。
protected void Page_PreRender(object sender, EventArgs e)
{
    this.ddlParentCost.DataBind();
}

#7


嗯,你的是两个参数,在GetScript中按需返回一个javacript就行了。

#8


如何通过JS动态获取用户控件里控件的ID
结贴快了点,没注意看还有回帖

#9


引用 5 楼 nocallstle 的回复:
下拉列表的ID都是唯一的,有必要再传过去?


可不唯一哦,如果你一个页面嵌套多个用户控件的话,他的ID是不一样的