6

我在页面上有以下 JScript

<script type="text/javascript">
    function ProcessButtonDisable() {
        var button = $find("<%=ProcessButton.ClientID %>");
        button.disabled = true;
            }
</script>

然后

<asp:Button ID="ProcessButton" Text="Process All" runat="server" OnClick="Process_Click" OnClientClick="ProcessButtonDisable()" />

运行页面并触发按钮时,我得到

Microsoft JScript 运行时错误:无法设置属性“已禁用”的值:对象为空或未定义

并且动态页面已将其转换为:

<script type="text/javascript">
    function ProcessButtonDisable() {
        var button = $find("ctl00_ctl00_BodyContentPlaceHolder_MainContentPlaceHolder_ProcessButton");
        button.disabled = true;
    }
</script>

<input type="submit" name="ctl00$ctl00$BodyContentPlaceHolder$MainContentPlaceHolder$ProcessButton" value="Process All" onclick="ProcessButtonDisable();" id="ctl00_ctl00_BodyContentPlaceHolder_MainContentPlaceHolder_ProcessButton" />

由于控件已明确定义,并且客户端 ID 似乎返回了正确的 ID,我不知道出了什么问题

有什么帮助吗?

ps 如果从代码中不清楚,这样做的目的是防止用户在初始点击后有时间重新加载页面之前点击并重新发送请求

4

6 回答 6

13

-1 假设 JQuery 的所有先前答案。$find 是Microsoft AJAX 库定义的函数。它“提供了 Sys.Application 类的 findComponent 方法的快捷方式”,该方法获取“对已通过 addComponent 方法注册到应用程序的 Component 对象的引用”。尝试改用$get(),它“提供了 Sys.UI.DomElement 类的 getElementById 方法的快捷方式”。

本页详细探讨了这两个函数:The Ever-Useful $get 和 $find ASP.NET AJAX Shortcut Functions

于 2013-11-21T16:09:36.873 回答
3

$find不同于$.find。第一个是为Microsoft AJAX 库定义findComponent的类的方法提供快捷方式。Sys.Application而第二个是来自 jQuery 的 API 方法,它获取当前匹配元素集中每个元素的后代,由选择器、jQuery 对象或元素过滤。

所以,$find必须找到 Component 而不是 html DOM。并且必须定义 ajax 库。

了解更多信息:

http://msdn.microsoft.com/en-us/library/vstudio/bb397441(v=vs.100).aspx

http://api.jquery.com/find/

于 2014-09-14T08:30:50.693 回答
-1

尝试这个:

<script type="text/javascript">
    function ProcessButtonDisable() {
        var button = $("#<%=ProcessButton.ClientID %>");
        button.disabled = true;
    }
</script>

[编辑] 或

<script type="text/javascript">
    function ProcessButtonDisable() {
        $("#<%=ProcessButton.ClientID %>").attr("disabled", "disabled");
    }
</script>
于 2013-09-09T14:45:05.917 回答
-2

您必须首先选择要“找到”的内容。例如,如果您选择文档,然后使用“查找”方法,您应该会得到您想要的结果。

<script type="text/javascript">
    function ProcessButtonDisable() {
        var button = $(document).find(("<%=ProcessButton.ClientID %>");
        button.disabled = true;
        }
</script>
于 2013-09-09T14:49:53.657 回答
-3

disabled不是 jQuery 对象属性,它是 DOM 元素属性。尝试使用:

$('selector').get(0).disabled = true

, 或者

$('selector').attr('disabled','disabled');
于 2013-09-09T14:53:40.813 回答
-5

您需要使用点表示法,就像find()jQuery 函数一样,如下所示:

<script type="text/javascript">
    function ProcessButtonDisable() {
        var button = $.find("<%=ProcessButton.ClientID %>");
        button.disabled = true;
    }
</script>

此外,如果您打算在 jQuery 逻辑中查找 DOM 元素,请不要费心连接OnClientClick服务器控件;通过 jQuery 连接 click 事件或将元素本身传递给 JavaScript 函数:

使用 jQuery 连接点击事件(推荐):

<script type="text/javascript">
    $(document).ready(function() {
         $("#<%=ProcessButton.ClientID%>").click(function() {
            $(this).disabled = true;
         });
    });
</script>

使用OnClientClick属性连接点击事件并传递元素(不推荐):

<asp:Button ID="ProcessButton" Text="Process All" runat="server" OnClick="Process_Click" 
    OnClientClick="ProcessButtonDisable(this)" />

<script type="text/javascript">
    function ProcessButtonDisable(elem) {
        elem.disabled = true;
    }
</script>
于 2013-09-09T14:39:11.137 回答