【问题标题】:Link to dynamically created div on another page链接到另一个页面上动态创建的 div
【发布时间】:2017-02-24 14:40:14
【问题描述】:

我有一个导航栏下拉菜单,其中列出了存储在数据库中的事件标题。我试图允许用户单击这些链接之一并将页面带到被单击的指定事件。问题是目标事件是由数据库动态创建的。

我相信我遇到了并发问题,因为 ajax 请求没有完成,它会抓取事件并动态创建它。有没有办法链接到页面并等待从数据库创建事件并向下滚动到对象 div。

这是导航栏中的链接之一:

<a href="events.php#2">The Choice </a>

这是 events.php 页面上的目标 div:

<div id='2'>Dynamic content</div>

我可以在 Javascript 或 PHP 中做些什么来等待它加载吗?也许通过访问隐藏的 div 来触发一个函数,然后该函数将滚动到该 div?

【问题讨论】:

  • 请发布一小部分完整的代码并显示您面临的问题。
  • 永远不要以数字开头的名称类/ID。
  • 不确定您还希望我发布什么我试图尽可能简化这一点。我只需要链接到另一个页面等待 ajax 请求完成然后滚动到目标 div。这不起作用,因为我链接到的 id 尚未加载。当我在同一页面上时,它工作正常。这严格来说是一个并发问题,我只是想知道是否有办法在链接到特定 div 之前等待 ajax 请求完成。
  • 如果你想看看内容是如何创建的,我可以给你看或者ajax请求?
  • 好的,我将重构 id 名称

标签: javascript jquery html css ajax


【解决方案1】:

由于 div 不存在,因此页面不会在加载时滚动,请在它存在时滚动到它。这可能发生在 ajax 查询成功时,所以当发生这种情况时,将您的页面向下滚动到新的 div。

例子:

$.ajax({
  url: "test.html"
  //whatever this ajax is supposed to do.
}).success(function() {
  //make the new div
  $('body').append('<div id="newDiv></div>')
  //scroll to the new div
  $('html, body').animate({
    // window.location.hash is the div you want to scroll to as set by the link on the other page, and it even comes pre hashed ("#whatever").
    scrollTop: $(window.location.hash).offset().top
  }, 2000);
});

【讨论】:

  • 如果页面上创建了多个事件,我该如何指定滚动到哪一个。我可以通过上一页的链接传递值吗?我可以在 php 中以某种方式执行此操作,它可能会填充会话变量以知道我正在请求哪个 div,如果页面刚刚正常加载,则为 null?
  • window.location.hash 会给你查询参数。我会用这个编辑答案。
猜你喜欢
  • 2017-03-05
  • 1970-01-01
  • 1970-01-01
  • 2019-09-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多