为啥将 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 函数会传递整个控件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 整数中保留前导零 [重复]

为啥不可能将互斥锁传递给线程?

为啥我必须将道具传递给构造函数和超级[重复]

为啥 registerForContextMenu 将 onCreateContextMenu 传递给 null ContextMenuInfo?

为啥我们将 UIViewController 传递给 UINavigationController 类?

为啥我不能将字符串传递给函数 GetDriveTypesA()?