我正在开发这个网站的问题。我试图在外部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');
}
}
基本上,我想要达到的目的是:
Refresh()
方法并仅刷新gridview。Refresh()
方法使用.aspx.cs页面中的btnRefresh_Click
事件。我刚刚用这个按钮,因为我不知道我还有其他选择。
现在我的问题是这个。我的代码能够从.aspx页面声明我的btn
变量。当它在外部.js文件中执行时,以下是我的btn
变量的样子:
编译器遍历btn.click()
行,该行应该从代码隐藏中触发btnRefresh_Click
事件。但是,它并没有激发。
我在这里遗漏了什么?请帮我。我被困在这里几个小时。
答案 0 :(得分: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');
}
}
答案 1 :(得分: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>
如果可能,您可以提供整个标记和所需的代码。您在哪里调用刷新函数
答案 2 :(得分:0)
我会选择最简单的事情 - 问题不在于按钮不可见,而是有一个隐形按钮,可以从javascript点击,按钮调用它的事件处理程序。我和OP有同样的黑客攻击:
通过设置它的style = display:none;使按钮永久不可见。
以这种方式,按钮存在于客户端页面上,我的JS点击它,然后服务器上的按钮事件处理程序在回发时被调用。在我设置UseSubmitBehavior=False
之前,这在Firefox中无法正常工作。现在它适用于IE和FF。
答案 3 :(得分: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" />
答案 4 :(得分:0)
更改 PostBackTrigger 的 AsynPostBackTrigger ,这应该可行
<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>