选择:jQuery插件…在asp.net中回发后无效
我在drop-down list
使用http://harvesthq.github.io/chosen/control 。 一切都很顺利,但我面临一个问题,如果我设置下拉列表的属性,即AutoPostBack="true"
,选择一个项目后控件丢失其属性并转换为正常的drop-down list
任何人都可以对此有任何想法吗? 请建议我。
谢谢
如果你绑定$(document).ready();
插件$(document).ready();
,然后添加此代码并检查。
$(document).ready(function(){ //Binding Code Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); function EndRequestHandler(sender, args) { //Binding Code Again } });
尝试添加此代码,
因为在每个post中,后退下拉列表将刷新并且所选择的绑定将丢失。您需要在每个回发中绑定它
前几天我确实遇到了这个问题。 对接的总痛苦是找到答案,所以我将在此总结。
AJAX调用完成后,不再触发DOMReady事件。 我所做的是将此代码添加到页面中..
// handlers for msajax Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(function (sender, args) { try { args.get_request().set_userContext(args.get_postBackElement().id); $(window).trigger("beginMsAjaxRequest", [sender, args, args.get_postBackElement().id]); } catch (e) { } }); Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function (sender, args) { try { if (args.get_error() == undefined) { var sName = args.get_response().get_webRequest().get_userContext(); $(window).trigger("endMsAjaxRequest", [sender, args, sName]); } } catch (e) { } });
本质上它的作用是扩展内置的.NET AJAX事件以使用jQuery。 但是它会返回UpdatePanel
的id
或任何启动AJAX请求的id
,允许你只定位其中的控件,以便你的插件可以更新它。
示例如下..
$(window).on("endMsAjaxRequest", function(event, sender, args, sName) { // sname is the id of the UpdatePanel, so.. $('.my-dropdown', '#' + sName).theDropDownPluginInit(); });
希望能很好地解释……
编辑:
您还可以使用begin事件执行任何操作,例如隐藏元素或禁用它们或其他任何内容……
$(window).on("beginMsAjaxRequest", function(event, sender, args, sName) { // sname is the id of the UpdatePanel, so.. $('#' + sName).fadeTo(300, 0.6); // fade the UpdatePanel to 60% opacity });
原因:所有jQuery插件都应用于HTML页面的Page Load事件,或者换句话说,文档就绪事件,当整个页面或文档完全在浏览器中呈现时触发。 现在,jQuery在应用插件时为所有控件分配唯一标识。 但是当一些控件在UpdatePanel内部并且发生部分PostBack时,jQuery分配的Unique Ids会丢失,因此插件会停止工作
解决方案:此问题的解决方案是每次UpdatePanel的异步请求或部分PostBack完成时我们需要重新应用jQuery插件。 为此,我们可以利用ASP.Net Framework提供的事件处理程序来检测UpdatePanel的异步请求或部分PostBack的完成情况。
码
//On UpdatePanel Refresh var prm = Sys.WebForms.PageRequestManager.getInstance(); if (prm != null) { prm.add_endRequest(function (sender, e) { if (sender._postBackSettings.panelsToUpdate != null) { for (var selector in config) { $(selector).chosen(config[selector]); } } }); };
将其添加到您的javascript部分