使用javascript触发asp:按钮单击事件

时间:2012-09-18 02:57:40

标签: javascript jquery click aspbutton

我目前正在开发一个项目,需要在javascript代码中执行一系列事件后触发asp:按钮点击事件。

请参阅下面的代码:

这是我的按钮,它是点击事件:

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

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

我引用了一个javascript文件,其中包含该页面的所有javascript代码。我是这样做的,因为我不喜欢在我的.aspx文件中混合我的javascript代码。

这是我的外部.js文件中的函数的样子:

function Refresh() {
    var btn = $(document).getElementById('btnRefresh');
    if (btn) {
        btn.click();
    }
    else {
        alert('false');
    }
}

我也尝试过我在互联网上看到的其他方式,如下所有这些都没有运气:

document.getElementById('btnRefresh');
__doPostBack('btnRefresh', '');
__doPostBack('btnRefresh', 'Click');
$('#btnRefresh').click();

有人可以指点我这么做的好方法吗?谢谢!

修改

我想做的是: 我在UpdatePanel中有一个gridview。我有一个触发器,当单击btnRefresh时会触发该触发器。基本上,它刷新了我的gridview。因此,我无法使用按钮的OnClick属性来调用我的javascript函数,因为我不会在第一时间单击该按钮。我需要能够从外部javascript中调用btnRefresh_Click事件,以便触发我的触发器来更新我的GridView。

编辑2:

我尝试使用以下行在.aspx页面上定义我的btn

         var btn = $(“#”);   

我也改变了我的JS代码如下:

  

function Refresh(){       if(btn){           btn.click();       }       其他{           警报( '假');       }}

js能够看到btn并且该事件通过了btn.click()行 但是,我的btnRefresh_Click仍未启动。我在这里错过了什么吗?

5 个答案:

答案 0 :(得分:0)

在这里,您可以使用OnClientClick属性并提及要在外部js中调用的函数名称,因为此属性实际在执行服务器端事件之前执行。

答案 1 :(得分:0)

查看ClientID财产。

您可以使用该属性获取客户端按钮的ID,并使用该ID触发点击。

function Refresh() {
    var btn = $("#<%=btnRefresh.ClientID%>");
    if (btn) {
        btn.click();
    }
    else {
        alert('false');
    }
}

但请注意<%=btnRefresh.ClientID%>只能在与btnRefresh相同的页面上工作,而不能在外部JS文件中工作。 ClientID由ASP.NET动态生成。

答案 2 :(得分:0)

由于您引用了JS文件,因此有两种选择。或者通过按钮的ClientID或将按钮的ClientIDMode设置为Static

我建议你将id传递给JS函数。

function Refresh(id) {
    var btn = $(document).getElementById(id);
    if (btn) {
        btn.click();
    }
    else {
        alert('false');
    }
}

如果要在另一个JS函数中调用它,请传入ClientID

function doSomthing(){
    //do this
    //do that
    Refresh('<%=btnRefresh.ClientID%>');
}

但正如你所说,如果你不想把JS放在你的aspx页面中,那么只需设置你的按钮ClientIDMode = Static

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

答案 3 :(得分:0)

这是一个&#39; hack&#39;我过去曾用过

客户端可见的按钮是

<input type="button" id="btPart1" value="Trigger Phase 1" 
    onclick="clicked()" class="btn btn-default" />

在网络表单中定义这样的按钮

<asp:button id="Triggered" runat="server" OnClick="btnRefresh_Click"
    Style="visibility: hidden;"/>

在您的JavaScript中,您将拥有

function clicked(){
    document.getElementById("ctl02_Triggered").click();
}

根据您使用的asp版本,ID会发生变化,因此请务必检查按钮的实际ID,以便通过js触发它。我之所以提到这一点,是因为在编译时,ASP实际上会根据它拥有的内容来转换你给出的ID。

答案 4 :(得分:0)

实际上,在运行任何JS方法之前,必须确保已加载DOM。因此,请确保您的js文件包含在DOM(html)的末尾。

由于btnRefresh按钮是服务器控件,因此您需要clientIDRefresh方法中引用

var btn= document.getElementById(‘<%=btnRefresh.ClientID=%>’);

但是您的代码没有显示您如何调用Refresh方法。所以我希望上面可以帮到你。或者您需要显示更多代码。