使用javascript触发asp:按钮单击事件
我目前正在开发一个项目,需要在javascript代码中执行一系列事件后触发asp:按钮单击事件。
请参阅下面的代码:
这是我的按钮,它是点击事件:
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(); } 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
相同的页面上工作,而不能在外部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
。
这是我过去使用过的’hack’
客户端可以看到的按钮是
在Web表单中定义这样的按钮
在你的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
方法。 所以我希望以上可以帮到你。 或者您需要显示更多代码。