$ Find返回null

Mik*_*keT 6 .net asp.net jscript.net

我在页面上有以下JScript

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

然后

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

当你运行页面并解雇按钮时,我得到了

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" />
Run Code Online (Sandbox Code Playgroud)

因为控件是明确定义的,客户端ID似乎返回正确的id我不知道什么是错的

有帮助吗?

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

xr2*_*0xr 13

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

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

  • 因为他们掩盖了一个复杂的点,所以对每个人的回答似乎都很小.如果所提供的答案完全无用且错误,那么你的答案主要是抱怨错误的术语而几乎没有努力回答原来的问题,因为你所得到的所有答案都值得投票,所以我能理解他们是否具有报复性 (2认同)
  • @MikeT这根本不是小事.这是向下投票功能的目的.他们正在回答一个假定的问题,而不是问的问题.术语与它无关.$ Find来自一个完全不相关的JavaScript库; MS AJAX JS库,而不是JQuery.我的答案有一个简短的句子描述我的投票以及为什么其他答案是错误的(这取决于我的答案的10%,而不是"最").显然那太小了,如果有的话,因为你显然没有花时间去理解问题或答案. (2认同)

Kar*_*son -5

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

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

另外,如果您打算不厌其烦地在 jQuery 逻辑中查找 DOM 元素,那么就不必费心连接OnClientClick服务器控件;通过 jQuery 连接 click 事件或将元素本身传递给 JavaScript 函数:

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

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

使用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>
Run Code Online (Sandbox Code Playgroud)