ASP.NET 导航到隐藏代码中的锚点

发布于 2024-08-02 00:56:48 字数 792 浏览 3 评论 0原文

我有一个简单的 Web 表单,其代码如下:

//...
//tons of text
//...
<a name="message" />
//...
//tons of text
//...
<asp:Button ID="ButtonSend" 
                runat="server" 
                text="Send"
                onclick="ButtonSend_Click" />

POST 之后,我想将用户导航到我的锚点“消息”。 我有以下代码:

protected void ButtonSend_Click(object sender, EventArgs e)
{
this.ClientScript.RegisterStartupScript(this.GetType(),
                                        "navigate",
                                        "window.location.hash='#message';",
                                        true);
}

这个简单的 JavaScript 在 Firefox 3.5.2 中不起作用 - 浏览器中的 url 正在更改,但页面未导航到锚点。 在 IE 8 中它运行得很好。

为什么这段 JavaScript 代码在 Firefox 中不起作用? 我错过了什么吗?

I have a simple Web Form with code like this:

//...
//tons of text
//...
<a name="message" />
//...
//tons of text
//...
<asp:Button ID="ButtonSend" 
                runat="server" 
                text="Send"
                onclick="ButtonSend_Click" />

After POST I want to navigate user to my anchor "message". I have following code for this:

protected void ButtonSend_Click(object sender, EventArgs e)
{
this.ClientScript.RegisterStartupScript(this.GetType(),
                                        "navigate",
                                        "window.location.hash='#message';",
                                        true);
}

This simple JavaScript is not working in Firefox 3.5.2 - url is changing in browser but page is not navigated to anchor. In IE 8 it works perfectly.

Why this JavaScript code is not working in Firefox? Am I missing something?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

冷情 2024-08-09 00:56:48

我已经解决了我的问题。 JavaScript 代码在我的锚点存在之前就被调用了。 这就是 Firefox 不向下滚动页面的原因。

我的代码现在看起来像这样:

this.ClientScript.RegisterStartupScript(this.GetType(),
                                        "navigate",
                                        "window.onload = function() {window.location.hash='#message';}",
                                         true);

页面加载后,我正在调用我的简单 JavaScript 函数。

找到解决方案的关键是克莱顿的回答。 Firebug 报告 getElementById 返回 null 引用。 然后我按照 andrewWinn 的建议查看了生成的 HTML - JavaScript 在锚点存在之前被调用。 做了一点谷歌搜索并找到了解决方案。

感谢您的回答!

I've solved my problem. JavaScript code was called before my anchor even existed. That's why Firefox wasn't scroll page down.

My code looks now like tihs:

this.ClientScript.RegisterStartupScript(this.GetType(),
                                        "navigate",
                                        "window.onload = function() {window.location.hash='#message';}",
                                         true);

After page load I'm calling my simple JavaScript function.

The key to found solution was Cleiton answer. Firebug reports that getElementById was returning null reference. Then I looked at generated HTML like andrewWinn suggested - JavaScript was called before anchor existed. Made little googling and found solution.

Thanks for your answers!

怪我闹别瞎闹 2024-08-09 00:56:48

门多萨,您可以使用原生的 scrollIntoView 函数。

要做你想做的事,只需写:

this.ClientScript.RegisterStartupScript(this.GetType(),
                                        "navigate",
                                        "document.getElementById('id_of_the_element').scrollIntoView();",
                                        true);

Mendoza, you can use native scrollIntoView function.

To do what you want, just write:

this.ClientScript.RegisterStartupScript(this.GetType(),
                                        "navigate",
                                        "document.getElementById('id_of_the_element').scrollIntoView();",
                                        true);
星光不落少年眉 2024-08-09 00:56:48

我遇到过一次。 你看过实际的 HTML 吗? 如果我记得的话,FireFox 在锚点上区分大小写。 我不知道最近有没有改变。

I ran into this once. Have you taken a look at the actual HTML? If I remember, FireFox was being case sensative on the anchors. I don't know if that changed recently or not.

难以启齿的温柔 2024-08-09 00:56:48

您可以尝试使用 jQuery LocalScroll 插件。 使用此功能,您可以滚动使用:

$(function() {
    $.scrollTo("#message");
});

或使用 ASP.NET 代码:

protected void ButtonSend_Click(object sender, EventArgs e)
{
    this.ClientScript.RegisterStartupScript(this.GetType(),
                                            "navigate",
                                            "$(function() { $.scrollTo('#message'); });",
                                             true);
}

这不是一个理想的解决方案,特别是如果您尚未在项目中的任何位置使用 jQuery,但它可能会解决您的问题。

You could try using the jQuery LocalScroll plugin. Using this, you could scroll using:

$(function() {
    $.scrollTo("#message");
});

Or with your ASP.NET code:

protected void ButtonSend_Click(object sender, EventArgs e)
{
    this.ClientScript.RegisterStartupScript(this.GetType(),
                                            "navigate",
                                            "$(function() { $.scrollTo('#message'); });",
                                             true);
}

It's not an ideal solution, especially if you're not using jQuery anywhere in your project already, but it might solve your problem.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文