如何在使用asp.net创建的Java脚本中查找动态控件

时间:2010-10-25 07:07:55

标签: c# javascript asp.net dynamic

我在ASP.NET中创建了动态控件,如下所示。

首先我创建了复选框

 CheckBox chkDynamic = new CheckBox(); 

然后

 TextBox txtDynamic = new TextBox();
 txtDynamic.ID = "txtDynamic";

这些控件添加在表格中添加的表格添加在表格中添加在aspPanel中(仅在设计页面创建的面板)

现在我需要..当选中复选框时我想用JavaScript清除txtDynamic文本框

我尝试了以下方法,但没有工作..

 chkDynamic.Attributes["onclick"] = "javascript:document.getElementById('" + txtDynamic.UniqueID + "').value='';";

我也尝试将方法调用为

 chkDynamic.Attributes.Add("onclick", "javascript:ClearText(this)");

但是在这个方法下面的行给我错误找不到“txtDynamic”..因为控件添加了动态。

 document.getElementById("<%= txtDynamic.ClientID %>").value="";

提前致谢....

3 个答案:

答案 0 :(得分:1)

经过大量调试后,我喜欢这个答案。什么ASP.Net在运行时做什么它更改控件的ClientID并附加父控件一些前缀所以在我添加整个表之前所有TR创建的结尾现在我做了什么来解决这个我添加了将表格作为plDynamicControls.Controls.Add(tblGeneralControls);,然后我添加了以下代码,它就像魅力一样

chkDynamic.Attributes["onclick"] = string.Format("yearSuffixCHK(this, '{0}')", txtDynamic.ClientID);
txtDynamic.Attributes["onchange"] = string.Format("yearSuffixTXT(this, '{0}')", chkDynamic.ClientID);

答案 1 :(得分:0)

在执行此脚本时,您是否确保已将文本框加载到DOM中?

我建议在服务器端的javascript变量中注册控件的uniqueID / Client id。

然后在整个DOM加载后在客户端绑定复选框上的click事件,然后执行清理文本框的相应工作

(您可以通过在页面末尾编写脚本或使用document.ready来确保DOM已加载,以防您使用jQuery)

谢谢,
Pranav Kauhik
pranavkaushik.wordpress.com

答案 2 :(得分:0)

您何时插入控件?如果你在Page_Load中执行它将无法正常工作。如果你还没有,我建议在Page_Init(或Page_PreInit)中插入控件。

此外,使用ClientID而不是UniqueID,因为UniqueID可以包含冒号字符(:),它在HTML ID属性中无效(并且在客户端脚本的变量名中不允许)。