LinkButton在OnClick事件中无法调用JavaScript函数?

3
我正在尝试从asp链接按钮调用jquery函数。以下是我的链接按钮html代码:
        <div style="padding-left:75px">
            <asp:LinkButton ID="lbAddCC" runat="server" ClientIDMode="Static" OnClick="ShowCCControls()" Text="Add CC"></asp:LinkButton>
        </div>

这是我的jQuery函数:

        function ShowCCControls() {

          $('#lblCC').show();
          $('#txtCC').show();
      } //end ShowCCControls()

当我尝试构建时,会出现以下错误:

ASP.internal_email_aspx不包含“ShowCCControls”的定义,并且找不到接受类型为“ASP.internal_email_aspx”的第一个参数的扩展方法“ShowCCControls”(是否缺少使用指令或程序集引用?)

我在另一页上使用复选框已经实现了这个功能:

                   <asp:CheckBox ID="chkNew" TabIndex="8" runat="server" Text="New Tank" OnClick="SetNewTankControls()"
                   ClientIDMode="Static" />

请问有人发现问题吗?谢谢。

以下是所有的JavaScript代码:

    <script  type="text/javascript" language="javascript">

    //document.ready is used for jquery, waits until the doc is ready to be manipulated
    $(document).ready(function () {

        HideControls();

    });  //end document.ready



    function HideControls() {

        $('#lblCC').hide();
        $('#txtCC').hide();
       $('#lblBCC').hide();
        $('#txtBCC').hide();
    }  //end HideControls()

    function ShowBCCControls() {
        $('#lblBCC').show();
        $('#txtBCC').show();
    } //end ShowBCCControls

    function ShowCCControls() {

        $('#lblCC').show();
        $('#txtCC').show();
    }  //end ShowCCControls()


你的点击处理程序是公共的吗? - Rikon
我没有在代码后台使用点击处理程序。我尝试在客户端上完成所有操作,因此正在尝试使用jquery。 - user1202606
4个回答

10

我尝试了OnClientClick,它可以工作,但唯一的问题是它调用了我想要的函数,然后还运行了一些其他的jquery函数......我也无法弄清楚为什么会发生这种情况。 - user1202606
@user1202606,您能具体说明一下,“其他”的jQuery函数是指哪一个吗?您确定它是jQuery函数吗? - walther
@user1202606 你的意思是“它仍然会回传到服务器上”吗?如果是的话,请查看AutoPostBack - user166390
<script type="text/javascript" language="javascript"> //document.ready is used for jquery, waits until the doc is ready to be manipulated - user1202606
我编辑了原始帖子并添加了<script>标签,请参见上文。 - user1202606
@user1202606,好的,哪一部分让你困扰?哪一部分不是你写的,导致你遇到了问题? - walther

1
    <div style="padding-left:75px">
        <asp:LinkButton ID="lbAddCC" runat="server" ClientIDMode="Static" OnClientClick="ShowCCControls()" Text="Add CC"></asp:LinkButton>
    </div>

+1 OnClick 是用于 服务器端 事件的。不过,AutoPostBack 在这里也适用吗? - user166390
我正在尝试不使用自动回发,而是尝试在客户端完成所有操作..... - user1202606
这就是为什么要使用“On Client Click”。同时设置AutoPostBack = false,这样它只会在“客户端”上执行。无论如何,“On Click”都不会直接调用JavaScript,并且将在PostBack期间导致服务器端错误,例如所发布的错误。 - user166390

1
你可以像这样在客户端脚本中设置处理程序:
  $('#lbAddCC').click(function() {

      $('#lblCC').show();
      $('#txtCC').show();
  });

由于您不打算使用此单击事件执行服务器端行为,因此没有必要在服务器控件上定义处理程序,然后使其呈现对客户端函数的调用,而直接调用它就可以了。

编辑:

当然,您需要将客户端脚本与服务器控件上误差的OnClick处理程序的删除耦合在一起,如下所示:

<asp:LinkButton ID="lbAddCC" runat="server" ClientIDMode="Static" Text="Add CC"></asp:LinkButton>

但这并不能解决错误,因为它是由使用 OnClick 引起的。 - user166390
是的,我应该说要删除onclick事件处理程序,我在我的原始答案中这样做了,然后又删除了它!我会更新答案。 - dougajmcdonald
我尝试过了,但没有成功。我开始觉得浏览器缓存了旧代码并继续运行它。你知道怎么清除缓存吗? - user1202606
如果浏览器仍然保留旧的/缓存代码,您需要删除离线文件/缓存内容,或者在大多数浏览器上,按下ctrl + f5通常可以解决问题。我预计,如果页面加载时执行其他代码,则页面上添加的脚本不止一个。请问您能否发布有关该页面的所有js? - dougajmcdonald

0
可能是页面在加载jQuery代码之前调用了函数,确保您先放置jQuery库再放置链接按钮并引用jQuery库。

我在母版页中引用了jquery库,并且在链接按钮之前使用了包含jquery函数的<script>标签。 - user1202606
我猜另一种方法是通过jQuery触发点击事件,并确保在链接按钮上关闭自动回发。jQuery是客户端的,如果按钮回发到服务器,页面会重新加载,所以什么也不起作用。通过设置autopostback = false来关闭它。OnClientClick事件是客户端的正确事件。$('<#<%=lbAddCC.ClientID%>').click(function() { $('#lblCC').show(); $('#txtCC').show(); }); - ZERO

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