如何将 ASP.NET 控件名称传递给 javascript 函数
How Do I Pass ASP.NET Control Name to Javascript Function?
我已经用谷歌搜索了一下,找到了很多'答案',但没有一个对我有用,所以也许你们聪明的人可以给我一个"明确"的答案?
我有一个Javascript函数:
function enableSaveLink() {
document.getElementById('<%= btnSaveLink.ClientID %>').removeAttribute('disabled');
}
这工作正常,但显然它是硬编码的,可以在我的页面上启用特定控件。 我希望能够从页面上的任何控件调用此函数,并将要启用的控件的名称作为变量传递。 所以,在一个理想的世界中,我的Javascript函数看起来像这样:
function enableControl(ctl) {
document.getElementById(ctl).removeAttribute('disabled');
}
我会这样称呼它:
<asp:button id="btnTestButton" runat="server" Text="Click Me" onclientclick="enableControl('txtTestTextbox') />
<asp:button id="txtTestTextbox" runat="server" enabled="false />
我知道我传递控件名称的方式永远不会起作用,但是我已经尝试以各种不同的方式传递它,但没有一种有效,所以这只是为了说明目的。 谁能告诉我如何实际完成这项工作?
您需要使用控件的 ClientID 属性。
这将有助于:
<asp:button id="btnTest" runat="server" Text="Click Me"
onclientclick="enableControl('<%= lblTest.ClientID %>') />
使用this
参考(更多信息在这里):
<asp:button id="btnTest" runat="server" Text="Click Me" onclientclick="enableControl(this);" />
然后在脚本中:
function enableSaveLink(elem) {
elem.removeAttribute('disabled');
}
在这里,您将对调用函数的对象的引用传递给函数,然后您可以只在元素上设置属性,而不是在 DOM 中找到它。
编辑 - 刚刚意识到您的预期用途是什么。如果您希望在单击时从禁用的元素触发事件,则无法从该元素执行此操作。它需要从其他一些启用的元素进行处理。 如果您打算在单击时禁用元素,但单击时不启用元素,则上述方法可以正常工作。
编辑 - 只是为了配合我的评论,如果您有这样的统一结构(即所有输入都有相应的标签 - 甚至按钮),那么:
<div>
<label onclick="activateSibling(this);">Input One:</label>
<input type="text" />
</div>
你可以试试这个:
function activateSibling(label) {
label.nextSibling.removeAttribute("disabled");
}
我做了一个jsFiddle,在jQuery中演示我的概念,它似乎工作正常。
编辑 - 好的,最后一个想法。自定义属性呢?您可以向可点击元素添加一个 target
属性,其中包含要启用的 Id,如下所示:
<label target="active_me" onclick="activate(this);">Click to activate</label>
<input type="text" id="active_me" disabled="disabled" />
和你的脚本:
function activate(label) {
var inputId = this.getAttribute("target");
var input = document.getElementById(inputId);
input.removeAttribute("disabled");
}
虽然,开始感觉我们正在与技术作斗争,我们离ctrlInput.ClientID
不太远了。但我想这会让你的标记更干净一些,并给你一个可以集体绑定的函数。
好的,我已经破解了它。 可能有多种方法可以做到这一点,但这相当优雅。
我的Javascript函数:
function enableControl(ctl) {
document.getElementById(ctl).removeAttribute('disabled');
}
我的 ASP.NET 标记:
<asp:Button ID="btnTestButton" runat="server" Text="Click to enable" OnClientClick="enableControl('txtTestTextbox');" />
<asp:TextBox ID="txtTestTextBox" runat="server" enabled="false" ClientIDMode="Static" />
键是 ClientIDMode 属性,当设置为静态时,这意味着控件在呈现时的客户端 ID 将与你在标记中为其提供的 ID 匹配。 如果它位于命名容器中,则可能需要将其包含在函数调用中传递的变量中。 有关 ClientIDMode 的更多信息,请参阅此处。
无论如何,这对我有用! 谢谢大家的投入。
ClientID 用于获取 javascript 上的服务器端控制。
var element=document.getElementById('<%=lblTest.ClientID%>');
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 正在全局范围中查找JavaScript函数
- 如何将输入(type=text)从html表单传递到javascript函数
- 如何调用这个匿名 JavaScript 函数
- 通过Ajax将JavaScript函数传递给PHP文件
- 在javascript函数中设置全局变量
- 如何在执行此特定onclick事件时执行JavaScript函数
- 使用javascript函数在页面初始化后加载jquery
- javascript函数同步
- 如何将一个JavaScript函数回调为多个函数
- 在javascript函数中使用php变量
- 代码背后调用一个JavaScript函数的按钮点击-C#
- 将JavaScript函数与HTML分离
- 组合两个javascript函数
- 在 Java 中的 JavaScript 函数中插入 Wicket 值
- javascript函数内部的代码用逗号而不是分号分隔
- href属性内的javascript函数
- 使用html表单中的参数调用JavaScript函数
- 分析Javascript函数中的多个对象
- javascript函数的:和=之间的区别