Jquery 为什么回发后此js脚本在asp.net中不起作用?

Jquery 为什么回发后此js脚本在asp.net中不起作用?,jquery,asp.net,Jquery,Asp.net,我有以下代码: if (Page.IsPostBack) { Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Javascript", "alert('test');jQuery('html, body').animate({ scrollTop: jQuery('.newslettersubscribe').position().top }, 'slow');",true); } 我不

我有以下代码:

 if (Page.IsPostBack)
    {
        Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Javascript", "alert('test');jQuery('html, body').animate({ scrollTop: jQuery('.newslettersubscribe').position().top }, 'slow');",true);
    }
我不明白为什么滚动到页面底部的div不起作用

请注意,
警报('test')
正在出现

当然,我的页面上有一个带有class
newslettesubscribe
的div

更新: -使用脚本管理器加载我的js文件:

<asp:ScriptManager ID="ScriptManager1" runat="server" >
    <Scripts>
        <asp:ScriptReference Path="~/js/jquery-1.4.2.min.js" />
        <asp:ScriptReference Path="~/js/cufon-yui.js" />
        <asp:ScriptReference Path="~/js/helvetica_neue.js" />
        <asp:ScriptReference Path="~/js/jquery.cycle.all.js" />
        <asp:ScriptReference Path="~/js/default.js" />
        <asp:ScriptReference Path="~/js/swfobject-2.1.js" />
    </Scripts>
</asp:ScriptManager>

所以我需要找到一种方法在这些外部js文件加载后运行这个内联脚本

更新2:在与dknaack进行聊天讨论后,我们注意到
位置也存在问题。在他的建议下,我已经用
offset
替换了它,现在它开始工作了


非常感谢dknaack

我已经试过你的代码了

问题在于,您不会等到
DOM
完全加载

将您的
注册表客户端ScriptBlock
更改为此

Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Javascript", "alert('test');jQuery(function(){jQuery('html, body').animate({ scrollTop: jQuery('.newslettersubscribe').position().top }, 'slow');});", true);
    
看看这个

更新 确保
jQuery.js
文件位于脚本上方。查看加载页面的Html源代码。您应该将jQuery文件添加到sitemaster的
部分

string jsScript1 = @"
jQuery(function () {
   alert('test');
   jQuery('html, body')
     .animate({ scrollTop: jQuery('.newslettersubscribe').position().top }, 'slow');
});"

if (Page.IsPostBack)
    {
        Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Javascript", jsScript1,true);
    }

在C#代码中使用漂亮js的诀窍,还需要在DOM加载完成后运行此动画--通过向jQuery()传递函数来实现这一点。

我发现了两个问题。首先,您可能希望使用
ScriptManager.RegisterStartupScript
而不是
Page.RegisterClientScriptBlock
。这将把脚本放在页面的底部而不是顶部。脚本块更多用于您希望放置在页面上的函数,您可以稍后调用这些函数

第二,正如其他答案所提到的,您应该将动画代码包装到某个客户机生命周期事件中。您可以像这样钩住jQuery的
ready
事件:

jQuery(function() { /* Your Code */ });
当DOM准备好被操作时,但在页面实际完成加载之前,它将执行您的代码。如果要等待页面加载完成,可以执行以下操作:

jQuery(window).load(function() { /* Your Code */ });

你说的似乎确实对,我用你的代码替换了我的代码,但在我的情况下滚动不起作用。。。这个div在一个用户控件中,我把这个代码放在用户控件的Page_Load中,但它仍然不起作用……我查看了页面的源代码,注意到这个js是在jquery js文件加载之前放置的……也许这就是原因……您是否已将
jquery.js
添加到您的sitemaster中?查看加载页面的html。jQuery文件必须位于脚本上方。;)就这样。在sitemaster的
部分添加您的jQuery文件。很抱歉回来:我使用脚本管理器加载我的jQuery内容和其他js文件…我真的需要这个脚本管理器..有没有办法根据脚本管理器更新答案?我试过:
ScriptManager.RegisterClientScriptBlock(这个,typeof(Page),“key”,“alert('test');jQuery(function(){jQuery('html,body')).animate({scrollTop:jQuery('.newslettesSubscribe').position().top},'slow');});“,true)但仍然不起作用。。。