iscroll jquery在部分回发时中断

时间:2012-02-09 15:32:38

标签: javascript jquery ajax

我找到了一个名为iScroll的脚本,可以在iPad设备上用作Verticle列表的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 upadate面板中,并且回滚时滚动中断。

当触发列表刷新的事件发生时,我已尝试使用c#中的registerstartupscript:

    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更新面板

2 个答案:

答案 0 :(得分:1)

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

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);

function endRequestHandler(sender, eventArgs)
{
   myScroll.refresh();
} 

答案 1 :(得分:0)

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

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

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