$Find returns null



我在页面上有以下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 运行时错误:无法设置属性"禁用"的值:对象为 null 或未定义

动态页面已将其转换为:

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

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

本页详细介绍了这两个函数:永远有用的$get和$find ASP.NET AJAX 快捷函数

$find

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

因此,$find必须找到组件而不是html DOM.并且必须定义ajax库。

欲了解更多信息:

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

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

试试这个:

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

您必须先选择您要"查找"的内容。 例如,如果您选择文档,则使用"查找"方法,您应该获得所需的结果。

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

disabled 不是 jQuery 对象属性,它是一个 DOM 元素属性。尝试使用以下任一方法:

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

$('selector').attr('disabled','disabled');

你需要使用点表示法,因为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 属性连接 click 事件并传递元素(不推荐):

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

最新更新