1

我目前正在开发的这个网站有问题。我试图在外部 js 文件中的一系列代码之后触发按钮的 Click 事件。请在下面查看我的代码:

.ASPX:

<script type="text/javascript">
    var btn = $("#<%=btnRefresh.ClientID%>");
</script>

...

<asp:Button ID="btnRefresh" name="btnRefresh" runat="server" Visible="false" Text="btnRefresh" onclick="btnRefresh_Click" />

<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
    <asp:GridView ID="myGrd" runat="server">...</GridView>
    <Triggers>
       <asp:AsyncPostBackTrigger ControlID="btnRefresh" EventName="Click" />
    </Triggers>
<asp:UpdatePanel>

.ASPX.CS:

protected void btnRefresh_Click(object sender, EventArgs e)
{
    myGrd.DataSource = null;
    myGrd.DataSource = GetData();
    myGrd.DataBind();
}

.JS:

function Refresh() {
    if (btn) {
        btn.click();
    }
    else {
        alert('false');
    }
}

基本上,我想要实现的是:

  1. 能够在页面上实现我的添加、编辑、删除。(现在运行)
  2. 调用外部 JS 文件中的方法以显示添加、编辑、删除的弹出框。
  3. 成功后,调用该Refresh()方法并仅刷新 gridview。
  4. Refresh()方法使用btnRefresh_Click来自 .aspx.cs 页面的事件。

我只是为此目的使用了该按钮,因为我不知道我还有什么其他选择。

现在我的问题是这个。我的代码能够btn从 .aspx 页面声明我的变量。当它在外部 .js 文件中执行时,我的btn变量如下所示:

在此处输入图像描述

编译器通过btn.click()应该btnRefresh_Click从代码隐藏触发事件的行。然而,它并没有火起来。

我在这里错过了什么吗?请帮我。我已经被困在这里好几个小时了。

4

5 回答 5

1

您是否尝试过在需要时和文档完全加载后找到 btn 对象,而不是在文档完全加载之前获取它?

改变:

<script type="text/javascript">
    var btn = $("#<%=btnRefresh.ClientID%>");
</script>

<script type="text/javascript">
    var btnid = "#<%=btnRefresh.ClientID%>";
</script>

和你的js:

   function Refresh() {
     var btn  = $(btnid);
        if (btn) {
            btn.click();
        }
        else {
            alert('false');
        }
    }
于 2012-09-20T07:05:27.863 回答
0

您正在设置按钮Visible="false"

<asp:Button ID="btnRefresh" name="btnRefresh" runat="server" Visible="false"

设置它不会在屏幕上呈现按钮。它会从标记中完全删除元素。所以不能附加任何事件。而不是这个尝试设置s**tyle="display:none"..这样做会在屏幕上呈现按钮但不会显示它..事件也将附加到元素..

更新 ::: 尝试在 Document.Ready 函数中访问您的 btn。这确保您在 DOM 中可用时添加按钮**

<script type="text/javascript">
   $(function() {
       var btn = $("#<%=btnRefresh.ClientID%>");
    });
</script>

如果可能的话,你能提供整个标记和所需的代码。你在哪里调用刷新函数

于 2012-09-20T06:41:17.207 回答
0

我会选择最简单的事情 - 问题不是使按钮不可见,而是有一个不可见的按钮,可以从 javascript 中单击,并让按钮调用它的事件处理程序。我有与 OP 相同的技巧:通过设置它的 style=display:none; 使按钮永久不可见。以这种方式,按钮存在于客户端页面上,我的 JS 单击它,然后服务器上的按钮事件处理程序在回发时被调用。在我设置之前,这在 Firefox 中无法正常工作UseSubmitBehavior=False。现在它可以在 IE 和 FF 中使用。

于 2012-09-20T06:48:09.610 回答
0

我想您在客户端 onclick 看到的不是您在服务器端 OnClick 声明的那个。

客户端的 onclick 等于服务器端的 OnClientClick。

更新:

您仍然可以使用 btn.click() 调用服务器端点击函数;(与您使用的相同),但要实现这一点,您必须首先将控件的 Visible 属性设置为 true。当您不将其设置为 true 时,控件甚至不会呈现给客户端,并且不会为其维护任何状态。

如果您不想最初显示按钮,而不是设置 Visible = "False" 您可以编写 Style="visibility:hidden";

因此,按钮的 aspx 标记应如下所示

<asp:Button ID="btnRefresh" name="btnRefresh" runat="server" Style="visibility:hidden" Text="btnRefresh" onclick="btnRefresh_Click" />
于 2012-09-20T06:59:17.447 回答
0

将AsynPostBackTrigger更改为PostBackTrigger这应该可以工作

 <asp:Button ID="btnRefresh" name="btnRefresh" runat="server" Visible="false"    Text="btnRefresh" onclick="btnRefresh_Click" />

<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
<asp:GridView ID="myGrd" runat="server">...</GridView>
<Triggers>
   <asp:PostBackTrigger ControlID="btnRefresh" EventName="Click" />
</Triggers>

于 2012-09-20T07:08:41.240 回答