在我的页面中,我有一组两个单选按钮。如果单击单选按钮 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('ctl00$MainContent$btnSearch','')" 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/