如何使用JavaScript调用asp:Button的OnClick事件?

18

我有一个问题,我有一个如下的按钮:

<asp:Button ID="savebtn" runat="server" OnClick="savebtn_Click" Visible="false" />

我有以下类似的HTML按钮:
<button id="btnsave" onclick="fncsave">Save</button>

我有以下 JavaScript 代码:

<script type="text/javascript">
     function fncsave()
     {
        document.getElementById('<%= savebtn.OnClick %>').click()
     }
</script>

我的问题是,我怎样才能从HTML按钮中调用asp:Button OnClick?我已经阅读了可以通过按ID从JavaScript中调用此方法,但无法正常工作。
非常感谢任何帮助。
谢谢。

可能是重复的... @Mortalus 调用 __doPostBack 方法是否可以?我在实践中从未这样做过。 - Glenn Ferrie
我不确定你所说的“酷”是指 JavaScript 方法的什么意思 :) 但是,是的,你可以使用它。如果你能够模拟实际客户端按钮点击,就像其中一个答案那样,那会更简单,因为有时你可能想要进行部分回传,而问题中的答案将无法起作用。 - Mortalus
2个回答

30

设置 style="display:none;"。通过设置visible=false,它不会在浏览器中呈现按钮。因此,客户端脚本不会执行。

<asp:Button ID="savebtn" runat="server" OnClick="savebtn_Click" style="display:none" />

HTML标记应该是

<button id="btnsave" onclick="fncsave()">Save</button>

将 JavaScript 更改为

<script type="text/javascript">
     function fncsave()
     {
        document.getElementById('<%= savebtn.ClientID %>').click();
     }
</script>

正确的onclick应该是 onclick="fncsave(); return false;" - Eric Herlitz
1
救命稻草。如果我使用return false;,它能阻止页面的 PostBack 吗? - SearchForKnowledge

6

如果您愿意使用jQuery:

<script type="text/javascript">
 function fncsave()
 {
    $('#<%= savebtn.ClientID %>').click();
 }
</script>

另外,如果您使用的是.NET 4或更高版本,则可以将 ClientIDMode == static 并简化代码:

<script type="text/javascript">
 function fncsave()
 {
    $("#savebtn").click();
 }
</script>

参考:控件的ClientIDMode属性的MSDN文章


不客气。问题是,为什么不直接使用ASP.NET按钮? - Glenn Ferrie
我正在使用一些CSS和jQuery,但ASP.NET让我很难样式化或使我的设计工作。 - jorame
这可能是另一篇文章的主题。由.NET生成的HTML在CSS方面应该与“普通的旧HTML”控件没有任何区别。 - Glenn Ferrie
1
还有一件事,使用“static” clientIDMode 可能会降低这个 CSS 难度的门槛。 - Glenn Ferrie
1
我已经浏览了网上关于我的问题的几乎所有答案,但是你的那一行 “另外,如果您使用的是 .NET 4 或更高版本,则可以将 ClientIDMode == static 并简化代码:”最终起到了决定性的作用!!! - Иво Недев

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接