【问题标题】:Finding control寻找控制
【发布时间】:2009-11-04 20:16:24
【问题描述】:

以下不起作用:

var EtxtDOB = $get('<%=FormView1.FindControl("frmEditPerson").FindControl("EtxtDOB").ClientID %>');

如何在 javascript 中找到这个嵌套控件?

【问题讨论】:

  • 为什么不直接使用 getElementById('');?另外,当您查看源代码时, 是否返回正确的 id?
  • 在页面的生命周期中,您何时尝试获取 clientID ?你确定所有的控件都加载了吗?我觉得有点不对
  • 检查源代码,看看那行发出了什么,我猜那里什么都没有

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


【解决方案1】:

我发现在页面的代码隐藏中显式发出要通过 Javascript 访问的控件的 ID 在代码方面更加清晰。比如:

Page.RegisterClientScriptBlock("clientIDs", "var myControlID = '" + myControl.ClientID + "';");

然后你可以在你的客户端脚本的任何地方访问它,而且它更干净:

var ExtODB = getElementById(myControlID);

如果您想花哨,请创建一个实用函数来为您执行此操作...或创建一个自动执行此操作的自定义属性。

【讨论】:

    【解决方案2】:

    通常您使用 'getElementById' 或 Javascript 中的类似内容。如果您的控件名为“EtxtDOB”,那么这可能对您有用:

    
    document.getElementById('EtxtDOB').setAttribute()....
    

    (不确定 $get 指的是什么......)

    【讨论】:

    • 不起作用。我相信 $get 和 getElementById 接近相同。虽然我见过 getelementID 工作和 $get 有时不工作。我相信 $get 只允许服务器控制。不过我可能完全错了。
    • 除非你将'EtxtDOB'替换为你的控件的ID,否则它不会起作用。如果它是动态生成的 ID,那么您需要使用在 cmets 中为您提供的“David”形式的代码来回答您的问题。
    • $get() 是 ASP.NET AJAX js 的一部分,并被定义为 document.getElementById() 的快捷方式 - 所以你必须引用该 .js 文件才能使用它,我认为是 ScriptManager也会导致它被包含在内。
    猜你喜欢
    • 1970-01-01
    • 2011-06-05
    • 2011-08-21
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 2012-12-25
    相关资源
    最近更新 更多