【问题标题】:jquery, asp.net ajax, javascript not executing at alljquery、asp.net ajax、javascript 根本不执行
【发布时间】:2011-11-03 17:07:10
【问题描述】:
<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 部分在回发后停止工作:

$(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() 由于与此相关的某种原因没有触发?

【问题讨论】:

  • 你会在任何地方调用 pageLoad() 吗?
  • 可以去掉 $().ready(function () {
  • 更具体地说,什么不起作用,你能在 .scroll 函数中发出警报吗?
  • pageLoad() 如果您使用的是 ASP.NET ajax,则会自动调用。

标签: javascript jquery asp.net ajax updatepanel


【解决方案1】:

尝试将 .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!

【讨论】:

  • 不,我用 bind 和 live 尝试了同样的事情,不执行。
  • 嘿 Rick,再次感谢您的回答,我尝试使用 pageLoad 而不是使用 $(document).ready(),这让我感到困惑。它曾经在其他项目上工作。我将尝试缩小代码范围以检查是否每次都调用 pageLoad。
  • 原来我确实有冲突,在别处使用 pageLoad()。
【解决方案2】:

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

window.onload = pageLoad; 

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

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

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

$().ready(function () {

【讨论】:

  • 我认为 pageLoad() 功能是由 ASP.NET ScriptManager 提供的,可以在任何地方自动使用。但我会尝试的。谢谢。
  • 去掉pageLoad之后的();您正在将函数变量分配给另一个变量,而不是执行函数。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2017-02-14
    • 2016-04-20
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多