$ Find返回null

时间:2013-09-09 14:34:20

标签: asp.net .net jscript.net

我在页面上有以下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运行时错误:无法设置属性'disabled'的值:object为null或undefined

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

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

6 个答案:

答案 0 :(得分:12)

假设JQuery,所有以前的答案都是

-1。由Microsoft AJAX Library定义的$find is a function。它“提供了Sys.Application类的findComponent方法的快捷方式”,它获取“对通过addComponent方法向应用程序注册的Component对象的引用”。请尝试使用$get(),“提供Sys.UI.DomElement类的getElementById方法的快捷方式。”

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

答案 1 :(得分:3)

$Find$.find不同。第一个提供了由Microsoft AJAX Library定义的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/

答案 2 :(得分:-1)

试试这个:

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

[edit]或

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

答案 3 :(得分:-1)

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

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

答案 4 :(得分:-2)

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

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

,或

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

答案 5 :(得分:-4)

你需要使用点表示法,因为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>