选择: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。 但是它会返回UpdatePanelid或任何启动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部分