Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript scrollIntoView()不是页面加载时的函数吗?_Javascript_Jquery - Fatal编程技术网

Javascript scrollIntoView()不是页面加载时的函数吗?

Javascript scrollIntoView()不是页面加载时的函数吗?,javascript,jquery,Javascript,Jquery,我有一套常见问题解答,默认情况下我隐藏了答案,只留下问题,并且我通过在每个问题中嵌入一个id锚来提供指向每个特定问题的链接,以便其他人可以链接到它 问题格式结构如下: <div class="contents"> <h1 class="question" id="titleOfQuestion">Some Question Title</h1> <div class="answer" id="titleOfQuestion">>

我有一套常见问题解答,默认情况下我隐藏了答案,只留下问题,并且我通过在每个问题中嵌入一个id锚来提供指向每个特定问题的链接,以便其他人可以链接到它

问题格式结构如下:

<div class="contents">
   <h1 class="question" id="titleOfQuestion">Some Question Title</h1>
   <div class="answer" id="titleOfQuestion">>
      Some Answer
   </div>
</div>
我收到Firebug中的错误:
TypeError:$(…)。scrollIntoView不是一个函数。但是,如果我随后从同一位置重新加载URL,则不会起作用

这是怎么回事

是domapi的一部分,而不是jQuery。您需要在元素而不是jQuery对象上运行它:

$('div#' + id)[0].scrollIntoView();


另请参见此

好的,下面是一个解决方案示例:

HTML:

<div id="view1">
    <i onclick="gotoView(1)">View 1</i> | <i onclick="gotoView(2)">View 2</i> | <i onclick="gotoView(3)">View 3</i>
</div>
<div id="view2">
    <i onclick="gotoView(1)">View 1</i> | <i onclick="gotoView(2)">View 2</i> | <i onclick="gotoView(3)">View 3</i>
</div>
<div id="view3">
    <i onclick="gotoView(1)">View 1</i> | <i onclick="gotoView(2)">View 2</i> | <i onclick="gotoView(3)">View 3</i>
</div>
div{height:800px; margin:20px; background:#CCC; text-align:center}
i{cursor:pointer; display:inline-block}
i:hover{background:#C00}
function gotoView(viewId){
    document.getElementById("view" + viewId).scrollIntoView();
    window.location.hash = "view" + viewId;
}
JavaScript:

<div id="view1">
    <i onclick="gotoView(1)">View 1</i> | <i onclick="gotoView(2)">View 2</i> | <i onclick="gotoView(3)">View 3</i>
</div>
<div id="view2">
    <i onclick="gotoView(1)">View 1</i> | <i onclick="gotoView(2)">View 2</i> | <i onclick="gotoView(3)">View 3</i>
</div>
<div id="view3">
    <i onclick="gotoView(1)">View 1</i> | <i onclick="gotoView(2)">View 2</i> | <i onclick="gotoView(3)">View 3</i>
</div>
div{height:800px; margin:20px; background:#CCC; text-align:center}
i{cursor:pointer; display:inline-block}
i:hover{background:#C00}
function gotoView(viewId){
    document.getElementById("view" + viewId).scrollIntoView();
    window.location.hash = "view" + viewId;
}

试试这个,更好地理解它。

我也试过这个,所有浏览器的结果都一样。在页面加载时,我不再收到
未定义的
消息,但它仍然无法工作。您是否在
$(文档)中执行此操作。准备好了
回调,以确保DOM已准备好访问?是的,包装在文档准备好的处理程序中。此方法的作用也类似于上述方法。初始URL加载不会触发
scrollIntoView()
,但是如果我在浏览器中重新加载它,
scrollIntoView()
会工作。我在jQuery对象上运行它时犯了同样的错误。这对我有用。谢谢!!这并不能完全回答问题,因为scrollIntoView()不适用于DOMContentLoaded或任何其他用于检查DOM是否已就绪/页面是否已加载的方法。我在任何地方都找不到任何文档/注释,无法找到scrollIntoView()在页面加载时不起作用的原因。但是,我可以通过使用稍微昂贵但可靠的选项来解决这个问题-
window.scrollTo({top:document.querySelector('.your selector here').offsetTop,行为:'smooth'})为什么要在H1和Div中放置相同的id titleOfQuestion。请同时回答这两个问题?因为它们在语义上是相关的,在它们之间提供某种链接是有意义的。但是,不允许对多个元素保持相同的id titleOfQuestion。Javascript不是那样工作的。