iscroll jquery在部分回发时中断

iscroll jquery breaks on partial postback

本文关键字:中断 jquery iscroll      更新时间:2023-09-26

我发现了一个名为iScroll的脚本,可以在iPad设备上用作垂直列表的1位数滚动机制。它所需要的只是:

<script type="text/javascript" src="http://cubiq.org/dropbox/iscroll4/src/iscroll.js"></script> 

以及以下内容:

var myScroll;
function loaded() {
  myScroll = new iScroll('wrapper');
}
document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);
document.addEventListener('DOMContentLoaded', function () { setTimeout(loaded, 200); }, false);

当页面第一次加载时,它运行良好,但是使用它的列表位于asp.net更新面板中,并且在回发时滚动会中断。

当触发列表刷新的事件发生时,我尝试过从我的c#中注册artupscript:

    public string ipadScript()
    {
        StringBuilder sb = new StringBuilder();
        sb.Append("var myScroll;" + Environment.NewLine);
        sb.Append("function loaded() {" + Environment.NewLine);
        sb.Append("alert('h');" + Environment.NewLine);
        sb.Append("myScroll = new iScroll('wrapper');" + Environment.NewLine);
        sb.Append("}" + Environment.NewLine);
        sb.Append("document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);" + Environment.NewLine);
        sb.Append("document.addEventListener('DOMContentLoaded', function () { setTimeout(loaded, 200); }, false);" + Environment.NewLine);
        return sb.ToString();
    }

ClientScriptManager cs = Page.ClientScript;
cs.RegisterClientScriptBlock(this.GetType(), "ipadKey", ipadScript(), true);

但这似乎也不起作用。我甚至没有得到我在脚本中添加的用于检查回发的"警报"。希望有人能帮忙?

解决了!!!!

function pageLoad(sender, args) {
    if (args.get_isPartialLoad()) {
 myScroll = new iScroll('wrapper');
}
}

这只适用于asp.net更新面板

更新面板后应调用刷新方法myScroll.refresh()。客户端:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);
function endRequestHandler(sender, eventArgs)
{
   myScroll.refresh();
} 

ClientScriptManager只会注册代码,但由于<head>元素不在更新面板中,因此它永远不会被添加,即使被添加也不会执行。

您需要注册一个客户端事件处理程序来重新初始化列表:

$(document).ready(function() {
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);
});
var endRequestHandler = function() { myScroll.refresh(); };