繁体   English   中英

使用javascript触发asp:button点击事件

[英]Trigger an asp:button click event using javascript

我目前正在开发一个项目,该项目需要在JavaScript代码中执行一系列事件后才能触发asp:button点击事件。

请在下面查看我的代码:

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

<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代码,如下所示:

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

js能够看到btn ,它的事件通过了btn.click()但是,我的btnRefresh_Click仍然没有启动。 我在这里想念什么吗?

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

看一下ClientID属性。

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

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

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

由于您引用了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" />

这是我过去使用的“ hack”

客户端可见的按钮是

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

定义在Web表单如按钮

<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。

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

由于btnRefresh按钮是服务器控件,因此需要通过clientID引用它。在Refresh方法中,

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM