从JavaScript asp.net调用按钮点击;不起作用

Calling button click from JavaScript asp.net doesn't work

本文关键字:不起作用 按钮 调用 JavaScript asp net      更新时间:2023-09-26

我试图通过JavaScript调用服务器端方法,首先显示一条确认消息,然后触发页面上的按钮点击来调用该函数。但是,.click()方法似乎不起作用。有什么想法吗?

<script type="text/javascript">
    function confirmDelete() {
        var button = document.getElementById("hiddenButton");
        if (confirm("Are you sure you would like to delete the row")) {
            button.click();
        }
    }
</script>

按钮定义如下

<asp:Button ID="hiddenButton" runat="server" onclick="showHiddenMessage"  Text="hidden" width="100px" />

我所发现的一切都表明它应该如此。包括这里:

http://www.comptechdoc.org/independent/web/cgi/javamanual/javabutton.html

这里:

从JavaScript调用ASP.NET函数?

var button = document.getElementById('<% =hiddenButton.ClientID %>');

客户端上服务器端控件的Id不同。如上所述修改代码并尝试。

修改confirmDelete()方法如下:

 function confirmDelete() {
    if (confirm("Are you sure you would like to delete the row")) {
       __doPostBack(( 'hiddenButton', '' );
    }
}

查看ButtonClientIDMode属性。将其设置为Static将导致按钮使用您在ASP.NET代码中输入的ID进行呈现。https://msdn.microsoft.com/en-us/library/system.web.ui.control.clientidmode.aspx

<asp:Button ID="hiddenButton" runat="server" ClientIDMode="Static" onclick="showHiddenMessage"  Text="hidden" width="100px" />

如果您查看生成的HTML,您应该会看到该按钮的ID为hiddenButton,这应该允许您的Javascript工作。

默认情况下,ClientIDMode值将为Inherit,并将在ID中包含NamingContainer。这意味着渲染的HTML的ID将类似于Panel_hiddenButton并且您的Javascript在当前代码中找不到它。

供参考:

  • 静态-ClientID值设置为ID属性的值。如果控件是命名容器,则该控件将用作其包含的任何控件的命名容器层次结构的顶部
  • Inherit-控件继承其NamingContainer控件的ClientIDMode设置

但是为什么不在按钮中使用javascript函数呢?我觉得更好:

<script type="text/javascript">
    function confirmDelete() {
        if (confirm("Are you sure you would like to delete the row?")) {
            return true;
        }
        return false;
    }

还有你的按钮:

<asp:Button ID="hiddenButton" runat="server" OnClientClick="return confirmDelete();" onclick="showHiddenMessage"  Text="hidden" width="100px" />

在这种情况下,如果用户单击"确定"按钮,则会出现showHiddenMessage功能。否则什么都不会发生。