【问题标题】:JQuery partial postback for dynamic control doesn't work用于动态控制的 JQuery 部分回发不起作用
【发布时间】:2012-10-24 01:07:23
【问题描述】:

我将Eric Hynds’ jQuery 用于多选列表。我已经在后面的代码中动态创建了控件,并且可以成功绑定到它。

来源看起来像:

<div class="multiselectlist">
  <select id="MainContent_List" multiple="multiple" name="ctl00$MainContent$List">
</div>

动态控件位于更新面板中。当我点击一个按钮时,它会进行部分回发,并且会丢失与之关联的 jQuery 功能。

我认为我需要“重新注册脚本”,所以我这样做了:

ScriptManager.RegisterClientScriptInclude(this, GetType(), "multiselect", Page.ResolveClientUrl("../../Assets/Scripts/jquery.multiselect.min.js"));

不幸的是,什么也没发生。我很确定是 javascript 没有运行。我没有正确注册 javascript 吗?

【问题讨论】:

  • 查看浏览器中的 def 工具。在 FF 和 Chrome 中,您可以查看加载了哪些脚本。另外,为什么不直接在标记中链接脚本呢?是否有条件加载?

标签: jquery asp.net dynamic-controls partial-postback


【解决方案1】:

尝试重新初始化多选列表,如下所示

$.ajaxStop(function(){
    $("#MainContent_List").multiselect();
});

【讨论】:

  • 很好的答案,但请注意:从 jQuery 1.8 开始,.ajaxStop() 方法只能附加到文档。 $( 文档 ).ajaxStop(function() { $( "#loading" ).hide(); });
【解决方案2】:

如果我的理解是正确的,您只需将 JQuery Multiselect 重新绑定到 select 控件即可。

这是因为 UpdatePanel 的内容在每次出现部分帖子时都会重新渲染,这意味着 DOM 元素会在每个帖子上被删除并重新创建

为了实现您的目标,只需按如下方式重新绑定事件:

Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(function (a, e) {
     // place here the re-initialization of your multiselect plugin
});

此外,您可以在函数中使用shortcut:

function pageLoad() {
    // place here the re-initialization of your multiselect plugin
}

【讨论】:

  • 抱歉,我很难在此处正确放置代码。 string multiSelectScript = "$(function () {Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);" + "function EndRequestHandler(sender, args) {" + "$(\"#MainContent_ClaimantType_ID_MultiSelectList\").multiselect ({selectedList:4}); } });"; ScriptManager.RegisterStartupScript(Page, typeof(Page), "multiselect", multiSelectScript, true);什么也没有发生。这里的问题是我在注册启动脚本中注册页面而不是精确控制吗?谢谢。
  • 实际上您的建议确实有效。我在 FireFox 中运行它,所以我可以看到使用 FireBug 添加到页面源的 javascript。什么都没有发生。我刚刚在 IE 中尝试过,它确实在那里工作。所以下一个挑战是让它在 FireFox 中运行。感谢您的帮助。
猜你喜欢
  • 2016-04-18
  • 2011-01-23
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
相关资源
最近更新 更多