jquery,asp.net ajax,javascript根本不执行

时间:2011-11-03 17:07:10

标签: javascript jquery asp.net ajax updatepanel

<script type="text/javascript">
    function pageLoad() {
        var $scrollingDiv = $("#scrollfix");
        $(window).scroll(function () {
            if ($(window).scrollTop() == $(document).height() - $(window).height()) {
                __doPostBack('<%= GetMoreResults.UniqueID %>', '');
            }
            $scrollingDiv
                .stop()
                .animate({ "marginTop": ($(window).scrollTop()) + -60 + "px" }, "slow");
        });
    }
</script>

此代码根本不执行,我使用pageLoad函数的原因是因为jquery代码在updatepanel部分回发后无法执行。 但是在使用这个之后,上面的代码都没有在第一页启动时起作用。

但是,用于处理页面加载的代码是低于但是jquery部分STOPPED在回发后工作:

$(document).ready(function () {
    $().ready(function () {
        var $scrollingDiv = $("#scrollfix");
        $(window).scroll(function () {
            if ($(window).scrollTop() == $(document).height() - $(window).height()) {
                __doPostBack('<%= GetMoreResults.UniqueID %>', '');
            }
            $scrollingDiv
            .stop()
            .animate({ "marginTop": ($(window).scrollTop()) + -60 + "px" }, "slow");
        });
    });
});

解决方案?非常感谢。

更新#2

这是我目前的代码: 它在第一次加载页面时起作用,但在__doPostBack的部分回发触发后不起作用。

<script type="text/javascript">
        window.load = pageLoad();
            function pageLoad() { 
                var $scrollingDiv = $("#scrollfix"); 
                $(window).scroll(function () { 
                    if ($(window).scrollTop() == $(document).height() - $(window).height()) { 
                        __doPostBack('<%= GetMoreResults.UniqueID %>', ''); 
                    } 
                    $scrollingDiv 
                    .stop() 
                    .animate({ "marginTop": eval($(window).scrollTop()) + -60 + "px" }, "slow"); 
                }); 
            } 
</script>

更新#3

我应该提到这个页面没有从Page继承,我创建了一个名为BasePage的自定义页面类:Page。

也许pageLoad()因为某些原因而无法触发?

3 个答案:

答案 0 :(得分:2)

尝试将.bind()与pageLoad

一起使用

<强>页面加载:

  

每次部分回发后也会调用它。它基本上起作用   作为Application.Init和。的组合   PageRequestManager.EndRequest。

   function pageLoad() {
        var $scrollingDiv = $("#scrollfix");
        $(window).bind('scroll', function() {
            if ($(window).scrollTop() == $(document).height() - $(window).height()) {
            __doPostBack('<%= GetMoreResults.UniqueID %>', '');
            }
            $scrollingDiv
            .stop()
            .animate({ "marginTop": ($(window).scrollTop()) + -60 + "px" }, "slow");
        });
    }

$(document).ready() and pageLoad() are not the same!

答案 1 :(得分:1)

除非您将代码分配给window.onload事件,否则该代码不会执行:

window.onload = pageLoad; 

我还会考虑使用eval函数包装上边距的计算:

eval($(window).scrollTop() - 60) + "px"

最后,我认为不需要第二个就绪状态函数:

$().ready(function () {

答案 2 :(得分:0)

JavaScript对部分页面回发一无所知;这是一个围绕AJAX表单帖子的ASP.NET包装器,它返回HTML内容。如果您希望在部分页面回发后调用pageLoad,则必须在回发处理程序中注册调用pageLoad的客户端脚本。正如@James Johnson指出的那样,你还需要确保在第一页加载时调用该函数。