如何使ASP.NET按钮调用客户端javascript而不做回发

时间:2012-10-22 17:33:13

标签: c# javascript asp.net .net

我在ASP.NET中有一个带有C#代码的Web应用程序。主登录页面将有一种触摸板类型UI,其中有0-9的按钮可以输入#。

所以,我是ASP.NET和JavaScript的新手。当在UI上单击这些数字按钮时,不需要在服务器端执行任何操作 - 根本不应该有任何回发。所有需要做的就是在标签的文本上附加一个数字。我试图弄清楚如何在JavaScript中做到这一点,没有按钮导致任何类型的回发。

为了使示例更简单,我们只是说我在屏幕上有一个带有单个标签和单个按钮的UI,每次单击此单个按钮时,它应该在标签的文本上附加1。这是我的.aspx,但是当我尝试运行它时,我在运行时得到一个“对象预期”异常......

编辑:我修改了我的示例以包含以下答案中提出的建议,但仍然存在问题。要重现,可以将此.aspx代码复制到新VS Web应用程序项目的default.aspx中,然后运行它并单击1按钮;它应该在标签的值上附加1,但它会抛出“对象预期”异常。

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TestJavascript._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
  <form id="form1" runat="server">
    <div>
      <asp:Table ID="baseTable" runat="server" HorizontalAlign="Center">
        <asp:TableRow ID="labelRow" runat="server" HorizontalAlign="Center" Width="100" Height="30">
          <asp:TableCell ID="labelCell" runat="server" HorizontalAlign="Center" Width="100%" Height="100%" BorderStyle="Solid" BorderWidth="1px">
            <asp:Label ID="inputLbl" runat="server"/>
          </asp:TableCell>
        </asp:TableRow>
        <asp:TableRow ID="buttonRow" runat="server" HorizontalAlign="Center">
          <asp:TableCell ID="buttonCell" runat="server" HorizontalAlign="Center">
            <asp:Button ID="btn1" runat="server" Text="1" Height="70px" Width="70px" OnClientClick="btn1Click()"/>
          </asp:TableCell>
        </asp:TableRow>
      </asp:Table>
    </div>
  </form>
  <script type="txt/javascript">
    void btn1Click()
    {
        document.getElementById('<%= inputLbl.ClientID %>').value += "1";
        return false;
    }
  </script>
</body>
</html>

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:14)

您可以使用asp按钮的OnClientClick属性并添加阻止回发的return false;

<asp:Button ID="1Btn" runat="server" Text="1" Height="70px" Width="70px" 
    OnClientClick="btn1Click(); return false;" />

答案 1 :(得分:1)

使用return false;语句,它将停止回发;如果你需要从函数回发return true;

<script type="text/javascript">
void btn1Click()
{
    this.inputLbl.Text += "1";
    return false;
}
</script>

答案 2 :(得分:1)

首先,变量名称不应以数字开头,因此请将1Btn替换为有意义的名称(btnAppendOne)。

  1. 使用onclick方法将Button客户端事件绑定到PageLoad

    btnAppendOne.Attributes.Add("onclick", "return btnAppendOneClick();");
    
  2. 使用正确的javascript(return false应该取消回发):

    <script type="text/javascript">
         function btnAppendOneClick()
         {
             var updatedLabel = document.getElementById('<%=inputLbl.ClientID %>');
             updatedLabel.innerHTML = updatedLabel.innerHTML + "1";
             return false;
         }
    </script>
    

答案 3 :(得分:0)

您的脚本标记中有拼写错误。第一行(1)

 <script type="**text**/javascript">
void btn1Click()
{
    document.getElementById('<%= inputLbl.ClientID %>').value += "1";
    return false;
}