Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将ASP.NET控件名传递给Javascript函数?_Javascript_Asp.net_Variables - Fatal编程技术网

如何将ASP.NET控件名传递给Javascript函数?

如何将ASP.NET控件名传递给Javascript函数?,javascript,asp.net,variables,Javascript,Asp.net,Variables,我在谷歌上搜索到了很多“答案”,但没有一个对我有用,所以也许你们这些聪明人能给我一个“确定的”答案 我有一个Javascript函数: function enableSaveLink() { document.getElementById('<%= btnSaveLink.ClientID %>').removeAttribute('disabled'); } function enableControl(ctl) { document.getE

我在谷歌上搜索到了很多“答案”,但没有一个对我有用,所以也许你们这些聪明人能给我一个“确定的”答案

我有一个Javascript函数:

function enableSaveLink() {
    document.getElementById('<%= btnSaveLink.ClientID %>').removeAttribute('disabled');
}  
    function enableControl(ctl) {
        document.getElementById(ctl).removeAttribute('disabled');
    }
我这样称呼它:

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 />

我知道我传递控件名的方式永远不会起作用,但我尝试了所有不同的方式传递它,但都不起作用,所以这只是为了说明。有人能告诉我如何实际执行此操作吗?

您需要使用控件的属性

这将有助于:

<asp:button id="btnTest" runat="server" Text="Click Me" 
            onclientclick="enableControl('<%= lblTest.ClientID %>') />

使用
this
reference():

在这里,您将调用函数的对象的引用传递给函数,然后您就可以在元素上设置属性,而不是在DOM中查找它


编辑-刚刚意识到您的预期用途。如果希望在单击时从禁用的元素触发事件,则不能从该元素执行此操作。它需要从其他启用的元素处理。如果希望在单击时禁用元素,但在单击时不启用元素,则上述方法可以正常工作


编辑-仅为配合我的评论,如果您有这样一个统一的结构(即所有输入都有相应的标签,甚至按钮),那么:

我已经在jQuery中演示了我的概念,它似乎工作得很好


编辑-好的,最后一个想法。那么...怎么样您可以向包含要启用的Id的可单击元素添加
target
属性,如下所示:

<label target="active_me" onclick="activate(this);">Click to activate</label>

<input type="text" id="active_me" disabled="disabled" />

尽管如此,我们开始感觉到我们正在与这项技术进行一点斗争,而且我们离
ctrlInput.ClientID
不远。但我想这会使您的标记更清晰,并为您提供一个可整体绑定的函数

ClientID用于获取javascript上的服务器端控制

var element=document.getElementById('<%=lblTest.ClientID%>');
var-element=document.getElementById(“”);

好的,我已经破解了。可能有多种方法可以做到这一点,但这是相当优雅的

我的Javascript函数:

function enableSaveLink() {
    document.getElementById('<%= btnSaveLink.ClientID %>').removeAttribute('disabled');
}  
    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" />
了解有关clientdmode的更多信息


不管怎样,这对我有用!谢谢大家的意见。

您不能单击已禁用的按钮button@AmiramKorach这是一个非常好的观点。。。真不敢相信我忽略了OP的意图。。。在这种情况下,单击时不会从禁用的元素触发任何事件,因此无法执行此操作!我并不是试图改变我点击的控件的状态,我只是试图改变另一个控件的状态。诚然,在我的示例中选择标签作为禁用控件是一个错误的选择,我应该选择文本框或按钮。例如,我想单击按钮A,使用Javascript启用文本框A。因此,我不认为“this”关键字会有用。@PhilipStratford:会有一些统一的结构,你会遵循吗,比如在
后面跟一个
?看到我更新的答案。有趣的是,我不知道你能做到这一点,但不,不幸的是,页面上的控件被许多其他控件隔开。
var element=document.getElementById('<%=lblTest.ClientID%>');
    function enableControl(ctl) {
        document.getElementById(ctl).removeAttribute('disabled');
    }
<asp:Button ID="btnTestButton" runat="server" Text="Click to enable" OnClientClick="enableControl('txtTestTextbox');" />
<asp:TextBox ID="txtTestTextBox" runat="server" enabled="false" ClientIDMode="Static" />