更新面板时javascript不工作
我的页面中有几个选项卡,当我选择第一个下拉列表时,我试图在一个选项卡中更改另一个下拉列表。我正在使用updatepanel和脚本管理器。问题是我编写了一个datepicker javascript函数,如果我没有选择下拉框,它第一次可以正常工作,但是当我选择下拉框时,javascript就不工作了。如果有人能找出我做错了什么,这将是很有帮助的更新面板时javascript不工作,javascript,c#,asp.net,Javascript,C#,Asp.net,我的页面中有几个选项卡,当我选择第一个下拉列表时,我试图在一个选项卡中更改另一个下拉列表。我正在使用updatepanel和脚本管理器。问题是我编写了一个datepicker javascript函数,如果我没有选择下拉框,它第一次可以正常工作,但是当我选择下拉框时,javascript就不工作了。如果有人能找出我做错了什么,这将是很有帮助的 <asp:ScriptManager ID="ScriptManager1" runat ="server"></asp:ScriptM
<asp:ScriptManager ID="ScriptManager1" runat ="server"></asp:ScriptManager>
<div id="requestHistory" class="tab-pane">
<asp:UpdatePanel ID="UpdatePanelCRHistory" runat="server" CssClass="row" DefaultButton="btnSearch" UpdateMode="Conditional">
<ContentTemplate>
<div class="colmd-3 col-sm-3 col-xs-3 responsive-filterbar">
<asp:DropDownList runat="server" ID="drpCRHistoryFramework" ClientIDMode="AutoID" DataTextField="title" DataValueField="frameworkID" CssClass="form-control" AutoPostBack="true" OnSelectedIndexChanged="drpCRHistoryFramework_SelectedIndexChanged">
<asp:ListItem Selected="true" Text ="--Framework--" value="0" ></asp:ListItem>
</asp:DropDownList>
</div>
<div class="colmd-3 col-sm-3 col-xs-3 responsive-filterbar">
<asp:DropDownList runat="server" ID="drpCRHSkillName" ClientIDMode="AutoID" DataTextField="skillName" DataValueField="skillID" CssClass="form-control" AutoPostBack="true" OnSelectedIndexChanged="drpCRHSkillName_SelectedIndexChanged">
</asp:DropDownList>
</div>
<div class="colmd-3 col-sm-3 col-xs-3 responsive-filterbar">
<asp:DropDownList runat="server" ID="drpCRHLevel" ClientIDMode="AutoID" CssClass="form-control" AutoPostBack="true" OnSelectedIndexChanged="drpCRHLevel_SelectedIndexChanged">
</asp:DropDownList>
</div>
<div class="colmd-3 col-sm-3 col-xs-3 responsive-filterbar input-group date" style="padding-left: 15px;" id="dpDate">
<asp:TextBox runat="server" ID="txtFromDate" ClientIDMode="Static" TextMode="SingleLine" CssClass="form-control datepicker" placeholder="0"></asp:TextBox>
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
<asp:TextBox runat="server" ID="txtToDate" ClientIDMode="Static" TextMode="SingleLine" CssClass="form-control datepicker" placeholder="0"></asp:TextBox>
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div><br /><br />
<div class="col-md-3 col-sm-12 col-xs-12 responsive-filterbar">
<div class="input-group">
<asp:TextBox runat="server" ID="canidateRequestHistorySearchTextBox" ClientIDMode="Static" CssClass="form-control"></asp:TextBox>
<span class="input-group-btn">
<asp:LinkButton runat="server" ID="canidateRequestHistorySearchLinkButton" ClientIDMode="Static" OnClick="btncandidateRequestHistorySearch" CssClass="btn btn-primary" CausesValidation="false" ><span class="glyphicon glyphicon-search"></span></asp:LinkButton>
</span>
</div>
</div>
<br/><br/>
</ContentTemplate>
</asp:UpdatePanel>
问题在于,您将javascript设置为仅在页面准备就绪时调用。使用“更新”面板进行更新时,不会再次加载页面,但会更新单独的部分。这些部分包含需要javascript函数再次初始化控件的html 通过将其添加到母版页底部或特定页面底部,您可以使用以下命令(在MacBook上键入此命令,以便无法测试)触发初始加载和更新面板的初始化控件:
<script type="text/javascript">
function PartialPostBackFinished(sender, args) {
var updatePanels = args.get_panelsUpdated();
for (i = 0; i < updatedPanels.length; i++) {
//Do whatever needs to be triggered for each updated update panel
InitializeControls(updatedPanels[i]);
}
}
function InitializeControls(container) {
$('.datepicker', container).datepicker(); //Initialise any date pickers
}
if (Sys != undefined) {
//There's a ScriptManager on the page
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(PartialPostBackFinished);
if (!prm.get_isInAsyncPostBack()) {
//Trigger initialization for synchronous post back triggered outside updatepanels
InitializeControls(document);
}
}
else {
//Trigger initialization for pages without ScriptManager
InitializeControls(document);
}
</script>
函数partialPostSuffished(发送方,参数){
var updatePanels=args.get_panelsUpdated();
对于(i=0;i
这也将取代注册ClientScriptBlock的需要,因此将其从代码隐藏中删除
<script type="text/javascript">
function PartialPostBackFinished(sender, args) {
var updatePanels = args.get_panelsUpdated();
for (i = 0; i < updatedPanels.length; i++) {
//Do whatever needs to be triggered for each updated update panel
InitializeControls(updatedPanels[i]);
}
}
function InitializeControls(container) {
$('.datepicker', container).datepicker(); //Initialise any date pickers
}
if (Sys != undefined) {
//There's a ScriptManager on the page
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(PartialPostBackFinished);
if (!prm.get_isInAsyncPostBack()) {
//Trigger initialization for synchronous post back triggered outside updatepanels
InitializeControls(document);
}
}
else {
//Trigger initialization for pages without ScriptManager
InitializeControls(document);
}
</script>