当使用dialog HTML标记并调用.showModal()方法时,似乎当模式内容比对话框显示区域长时,对话框将在每次打开时自动滚动到底部.有没有一种干净的方法来 suppress 这种行为,从而使对话框内容保持在打开状态的最顶端?

document.getElementById("openDialog").addEventListener("click", () => document.getElementById("modal").showModal());

document.getElementById("closeDialog").addEventListener("click", () => document.getElementById("modal").close());
<button id="openDialog">Open</button>
<dialog id='modal'>
  <h1>Hello world 1</h1>
  <h1>Hello world 2</h1>
  <h1>Hello world 3</h1>
  <h1>Hello world 4</h1>
  <h1>Hello world 5</h1>
  <h1>Hello world 6</h1>
  <h1>Hello world 7</h1>
  <h1>Hello world 8</h1>
  <h1>Hello world 9</h1>
  <h1>Hello world 10</h1>
  <button id="closeDialog">Close</button>
</dialog>

推荐答案

感谢@Teemu在问题 comments 中的解释,这种行为的原因是因为button元素关注负载.

在我的例子中,我将该按钮用作dismise按钮,因此用不带href属性的a标记替换button可以解决问题.

document.getElementById("openDialog").addEventListener("click", () => document.getElementById("modal").showModal());

document.getElementById("closeDialog").addEventListener("click", () => document.getElementById("modal").close());
<button id="openDialog">Open</button>
<dialog id='modal'>
  <h1>Hello world 1</h1>
  <h1>Hello world 2</h1>
  <h1>Hello world 3</h1>
  <h1>Hello world 4</h1>
  <h1>Hello world 5</h1>
  <h1>Hello world 6</h1>
  <h1>Hello world 7</h1>
  <h1>Hello world 8</h1>
  <h1>Hello world 9</h1>
  <h1>Hello world 10</h1>
  <a id="closeDialog">Close</button>
</dialog>

Javascript相关问答推荐

阻止iOS浏览器在传输摄像机视频时启用全屏摄像机模式

JavaScript Date对象在UTC中设置为午夜时显示不正确的日期

如何通过在提交时工作的函数显示dom元素?

Chrome是否忽略WebAuthentication userVerification设置?""

使用javascript将Plotly Expandable Sparkline转换为HighCharter Plot在bslib卡中

将2D数组转换为图形

如何使用JavaScript将文本插入空div

html + java script!需要帮助来了解为什么我得到(无效的用户名或密码)

获取Uint8ClampedArray中像素数组的宽度/高度

我在Django中的视图中遇到多值键错误

更改预请求脚本中重用的JSON主体变量- Postman

如何在箭头函数中引入or子句?

Nextjs 13.4 Next-Auth 4.2登录(&Quot;凭据&,{});不工作

将对象推送到数组会导致复制

使用Ace编辑器对子组件实例的native-element 进行Angular 获取时面临的问题

FireBase云函数-函数外部的ENV变量

当从其他文件创建类实例时,为什么工作线程不工作?

如何使用Astro优化大图像?

不协调嵌入图片

select 2-删除js插入的项目将其保留为选项