我在drop-down list
中使用http://harvesthq.github.io/chosen/控件。一切都很顺利,但是我遇到了一个问题,比如如果我设置了下拉列表的属性,即AutoPostBack="true"
,在选择一个项目之后控件丢失其属性并转换为正常drop-down list
任何人都可以对此有所了解吗?请建议我。
由于
答案 0 :(得分:11)
如果您要绑定$(document).ready();
中的插件,请添加此代码并进行检查。
$(document).ready(function(){
//Binding Code
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
function EndRequestHandler(sender, args) {
//Binding Code Again
}
});
答案 1 :(得分:3)
尝试添加此代码,
<script type="text/javascript">
$(document).ready(function () {
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoaded)
});
function PageLoaded(sender, args) {
$("#dropdownid").chosen();
}
</script>
因为在每个帖子中,后退下拉列表将刷新并且所选择的绑定将丢失。您需要在每个回发中绑定它
答案 2 :(得分:1)
前几天我确实遇到了这个问题。它总是痛苦地找到答案,所以我将在这里总结一下。
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。但是它会返回id
的{{1}}或发起AJAX请求的任何内容,允许您仅定位其中的控件,以便您的插件可以更新它。
示例如下..
UpdatePanel
希望能够很好地解释......
编辑:
您还可以使用begin事件执行任何操作,例如隐藏元素或禁用它们等等......
$(window).on("endMsAjaxRequest", function(event, sender, args, sName) {
// sname is the id of the UpdatePanel, so..
$('.my-dropdown', '#' + sName).theDropDownPluginInit();
});
答案 3 :(得分:1)
<强>原因:强> 所有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部分