在updatepanel中丢失javascript click事件
问题描述:
我正在使用一个asp.net更新面板。在这个更新面板中,我有3个下拉框&“提交”按钮。使用javascript,我将一个“点击”事件绑定到提交按钮,以便捕获3个下拉列表的值,但是如果我从下拉列表中选择一个新值,我会执行一个自动回复以更改其他下拉列表的值。这样做会迫使我的页面丢失我的javascript单击事件。如果我删除了更新面板,一切正常。任何想法我怎么能做到这一点?这里是我的代码(我提到我global.js文件必须在页面底部):在updatepanel中丢失javascript click事件
ASPX:
<asp:UpdatePanel ID="updatepanelddlist" runat="server">
<ContentTemplate>
<asp:DropDownList ID="ddlCategory" runat="server" AutoPostBack="true" DataTextField="Description"
DataValueField="id" OnSelectedIndexChanged="ddlCategory_SelectedIndexChanged" CssClass="txt sc_dropdown">
</asp:DropDownList>
<br/>
<asp:DropDownList ID="ddlProduct" runat="server" CssClass="txt sc_dropdown" DataTextField="Description"
DataValueField="id" AutoPostBack="true" OnSelectedIndexChanged="ddlProduct_SelectedIndexChanged">
</asp:DropDownList>
<br/>
<asp:DropDownList ID="ddlFormat" runat="server" CssClass="txt sc_dropdown" DataTextField="Description"
DataValueField="id" AutoPostBack="true" OnSelectedIndexChanged="ddlFormat_SelectedIndexChanged">
</asp:DropDownList>
<br />
<asp:LinkButton ID="btnSearch" runat="server" Text="search"
OnClick="btnSearch_Click" Style="float: right;" />
</ContentTemplate>
</asp:UpdatePanel>
<script type="text/javascript" src='<%=ResolveUrl("~/Scripts/Tracking/global.js") %>'></script>
这里是我的global.js文件:
$(document).ready(function() {
setTracking();
});
function setTracking() {
//add a click event
$(this).bind('click', function(e) {
//do some stuff here
});
});
我该怎么做才能在updatepanel回发中保留我的javascript click事件?
谢谢
答
看起来像你的代码中缺少的东西。你说你绑定了提交按钮,但$(this)不在该按钮的上下文中。
无论如何,只有updatePanel中的控件在提交后才会重新呈现。这在技术上是页面上的新控件,这就是为什么click事件不再受限制的原因。
$(document).on("click", "[id$=btnSearch]", function() { ... });
详细了解。对这里: http://api.jquery.com/on/
mmmh,第一个解决方案,拿出在
与该按钮的选择试试这个,而不是直接结合,在文档绑定我的想法:在Page_Load中,使用Page.RegisterClientScriptBlock添加setTracking()脚本,您是否已经尝试过这种解决方案? – Alessio
你没有绑定点击提交按钮,你将它绑定到窗口对象:$(this).bind('click',..... $(this)[0]是windows对象。 –