为啥将 ClientID 传递给 javascript 函数会传递整个控件?
Posted
技术标签:
【中文标题】为啥将 ClientID 传递给 javascript 函数会传递整个控件?【英文标题】:Why does passing ClientID to a javascript function pass the whole control?为什么将 ClientID 传递给 javascript 函数会传递整个控件? 【发布时间】:2010-09-25 12:11:47 【问题描述】:如果我将 ClientID 作为参数传递给 javascript 函数而不包括单引号,它会作为对控件本身的引用传递,然后可以在不首先调用 getElementByID 的情况下使用它。
我在任何地方都找不到这种行为的记录,这是浏览器特定的东西还是 .net 的东西还是什么?
我正在代码隐藏中设置这样的调用...
protected void Page_Load(object sender, EventArgs e)
Button1.Attributes.Add("onClick", string.Format("showvalue(0)", TextBox1.ClientID));
我担心这可能不适用于旧版本的 IE。 谢谢。
【问题讨论】:
你真的看过这个生成的html吗?一看到源代码,我不认为这种行为有那么神秘。 谢谢,我不认为这很神秘,我只是知道这不是通常的做法,因此担心跨浏览器支持等。 【参考方案1】:在生成 JS 代码时在 ID 值周围添加引号,例如: string.Format("showvalue('0')", TextBox1.ClientID)
如果没有引号,showValue 会使用您的 ClientID 名称获取全局变量的实例,该名称通常是您的控件呈现的 DOM 元素。
【讨论】:
【参考方案2】:如果你用单引号传递它并使用 getElementByID 它应该适用于所有浏览器,这是“正常”的方式。
我不确定为什么这种方法会像你说的那样有效。它也适用于 Firefox 吗?
【讨论】:
以上是关于为啥将 ClientID 传递给 javascript 函数会传递整个控件?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 registerForContextMenu 将 onCreateContextMenu 传递给 null ContextMenuInfo?