javascript - 缺少 asp :Button if I use Enabled=false 的 OnClientClick(或 HTML 中的 onclick)

标签 javascript html asp.net

在我的页面中,我有一组两个单选按钮。如果单击单选按钮 2,它将激活搜索按钮。如果用户单击此搜索按钮,它将使用 jQuery .ajax 调用来检索数据并显示在 jqGrid 中。

启动时必须禁用搜索按钮。禁用是指如果用户单击它,则不会发生任何事情。

由于按钮是asp按钮,我使用Enabled作为:

<asp:Button ID="btnSearch" Text="Search" UseSubmitBehavior="false" runat="server" Enabled="false" OnClientClick="return SearchAccessCode()" />

以下是用于检测/处理单选按钮组切换的代码:

$('input[name$=radioGroup]').change(function() {
    if ($('input[name$=radioGroup]:checked').val() == "rbFirst") {
        $('#<%=btnSearch.ClientID%>').prop('disabled', true);
    }
    else {
        $('#<%=btnSearch.ClientID%>').prop('disabled', false);
    }
}

当我调试页面时,单击第二个单选按钮 (rbSecond) 后,将启用“搜索”按钮。我点击它但没有任何反应!我检查生成的 HTML,发现它与其他按钮不同。没有与之关联的 onclick()!

<input type="button" name="ctl00$MainContent$btnSearch" value="Search" id="MainContent_btnSearch" disabled="disabled" class="aspNetDisabled" />

从网络上,我知道 HTML 中的 Enabled 将转换为 disabled。因此,我将 Enabled 替换为 disabled

<asp:Button ID="btnSearch" Text="Search" UseSubmitBehavior="false" runat="server" Disabled="True" OnClientClick="return SearchAccessCode()" />

打开生成的HTML,发现它与其他asp按钮相同。含义:它有onclick()。当然,当我按下“搜索”按钮时,实际上执行了搜索功能!

 <input type="button" name="ctl00$MainContent$btnSearch" value="Search" onclick="return SearchAccessCode();__doPostBack(&#39;ctl00$MainContent$btnSearch&#39;,&#39;&#39;)" id="MainContent_btnSearch" Disabled="True" />

我只是忍不住要问为什么。由于 Javascript 可以插入到 ASP.NET 页面中,因此如果使用 Enabled="false" (Microsoft 方式)禁用按钮,我可以使用 JavaScript 重新启用它。但此时,我就会失去按钮和onclick()指向的函数之间的联系!

最佳答案

这是默认行为,因为该按钮无论如何都会被禁用并且没有任何功能。重新启用它,将触发回发并将 OnClientClick 添加到按钮:

<asp:UpdatePanel runat="server">
        <ContentTemplate>
            <asp:Button ID="btnSearch" Text="Search" UseSubmitBehavior="false" runat="server" Enabled="false" OnClientClick="console.log('btnSearch onClientClickEvent');" />
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
        </Triggers>
    </asp:UpdatePanel>
    <asp:Button ID="Button1" Text="Toggle Search Button" UseSubmitBehavior="false" runat="server" OnClick="Button1_Click" />

.cs:

protected void Button1_Click(object sender, EventArgs e) => btnSearch.Enabled = !btnSearch.Enabled;

如果您想将 OnClientClick 事件保留为标记,即使按钮被禁用,您也必须使用 JavaScript,这样就不会触发 PostBack:

document.getElementById("<%= btnSearch.ClientID %>").disabled = true;

或者正如您所说,只需使用 disabled 属性:

<asp:Button ID="btnSearch" Text="Search" UseSubmitBehavior="false" runat="server" disabled OnClientClick="console.log('btnSearch onClientClickEvent');" />

关于javascript - 缺少 asp :Button if I use Enabled=false 的 OnClientClick(或 HTML 中的 onclick),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47324325/

相关文章:

javascript - tinyMCE 获取当前选中的 HTML 元素

asp.net - 在asp.net网络表单应用程序中选择启用了Ajax的WCF服务时,优缺点是什么?

c# - DTO 与 WCF 层中的业务对象

html - 将之后的元素内联到 block 元素

javascript - 为iPhone改编网站的问题

c# - 构建正则表达式模式以最终从数据中选择所需的文本

javascript - 具有可点击的父 div 和可点击的子 div

javascript - 使用单个 JavaScript 函数聚焦后续字段

javascript - 使用 jQuery 在窗口滚动时添加类

javascript - 将 "value"从表单中的选择传递到具有 javascript 问题的 php 变量