5

我目前正在尝试将“colResizable”用于位于 AJAX UpdatePanel 内的 GridView。在第一次加载时,它运行良好,但只要 UpdatePanel 更新,它就会停止。

我知道这是由面板的完全刷新引起的,这意味着初始化添加的所有内容都不会被添加回来。

我已经尝试过“add_endRequest”解决方案

var prm = Sys.WebForms.PageRequestManager.getInstance(); 
prm.add_endRequest(function() { 
    $(".GridViewStyle").colResizable({ liveDrag: true }); 
}

但是,它被调用得太早并且不能解决我的问题。

我已经阅读了“.live()”方法,但我不明白如何将它用于初始化。对于像“鼠标悬停”这样的事件,我知道它是如何使用的,而且非常简单……但是,对于 inits,我不明白。

我目前的初始化线是:

$(document).ready(function () {
    $(".GridViewStyle").colResizable({ liveDrag: true });
});

遵循“鼠标悬停”示例,但我无法确定要连接哪个事件,因为文档没有列出“加载”之类的内容。如果是这样,我会使用这样的东西......

$(".GridViewStyle").live("load", function () { $(".GridViewStyle").colResizable({ liveDrag: true }); });

我四处寻找,但没有找到适合我需要的东西。我对 jQuery 很陌生,所以我可能没有使用正确的词汇/概念。

4

2 回答 2

0

You can use pageLoaded event of the PageRequestManager instead of the endRequest. Look at this event documentation:

Raised after all content on the page is refreshed as a result of either a synchronous or an asynchronous postback.

Also, in this event handler you may apply colResizable plugin only if UpdatePanel where GridView control located created or updated. This allows you to avoid redundant plugin initialization calls on each async postback that may be raised by control in some other UpdatePanel

Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(initializeResizeable);

function initializeResizeable(sender, args) {
    var context = $(args.get_panelsCreated()).add(args.get_panelsUpdated());
    $(".GridViewStyle", context).colResizable({ liveDrag: true }); 
}

Also, with this script you can remove plugin initialization from document.ready handler as this script will be executed on first page load as well as on each async postback

于 2012-11-07T05:45:20.857 回答
0

.live() 已被弃用,因此请尝试使用 jQuery 的.on()方法:

$(document).on("change", $('.GridViewStyle'), function() {
    $(this).colResizable({ liveDrag: true });
});

此外,您可能希望postbackSafe: true在初始化程序中设置以在回发期间保持列宽变化。

于 2012-11-07T04:05:50.167 回答