HTML - 单击按钮会导致列表因未知原因滚动到顶部

2024-01-08

我正在使用 tampermonkey 添加一些自定义按钮Unity文档 https://docs.unity3d.com/Manual.

我注意到一个奇怪的问题如果我使用 html<button>。每次当我单击按钮时,滚动列表就会滚动到顶部,并且代码仅在第二次单击时执行。


但是,如果我更换<button> with <div>然后一切都工作得很好。


Why is <button>行为如此奇怪?

下面是tampermonkey用于复制的脚本。

// ==UserScript==
// @name         Unity Documentation (bugtest)
// @namespace    https://docs.unity3d.com
// @version      1.0
// @description  test
// @author       Edward Black
// @match        *://docs.unity3d.com/*
// @grant        GM_addStyle
// ==/UserScript==

GM_addStyle('.confirmBox { z-index: 100; width: 275px; background-color: greenyellow; border: 1px solid black; }');
GM_addStyle('.confirmBoxButtons { margin-top: 5px; }');
GM_addStyle('.confirmBoxClose { position: absolute; height: 20px; width: 20px; background-color: white; color:black; border: 0.5px solid black; text-align: center; right: 0px; }');
GM_addStyle('.confirmBoxClose:hover { background-color: black; color:white; cursor: pointer; }');
GM_addStyle('.confirmBoxBtn { background-color: white; color:black; width: 100px; border: 1px solid black; }');
GM_addStyle('.confirmBoxBtn:hover { background-color: black; color:white; cursor: pointer; }');

$(document).ready(function() {

    setTimeout(function() {
        prepareCustomContextMenue();
        $("div.mCSB_container").delegate("#theButton", "click", function() {
            alert("Hello from Button");
        });
        $("div.mCSB_container").delegate("#theDiv", "click", function() {
            alert("Hello from Div");
        });
        $("div.mCSB_container").delegate(".confirmBoxClose", "click", function() {
            $(".confirmBox").remove();
        });

    }, 4000);


});

function prepareCustomContextMenue()
{
    $("div.mCSB_container").find("a").each(function(j, obj) {

        $(obj).on("contextmenu", function(){
            return false;
        });
        $(obj).on("mousedown", function(e){
            if( e.button == 2 ) {

                console.log('Right mouse button!');
                showConfirmBox(this);

                return false;
            }
            return true;
        });
    });
}

function showConfirmBox(container)
{
    $(".confirmBox").remove();

    var elm = '<li><div class="confirmBox">'+
                  '<div class="confirmBoxClose">x</div>' +

                  '<div class="confirmBoxButtons">' +
                      '<button id="theButton" class="confirmBoxBtn"> This is a button </button>' +
                      '<div id="theDiv" class="confirmBoxBtn"> This is a div </div>' +
                  '</div>' +
              '</div></li>';

    $parent = $(container).parent();
    $(elm).appendTo($parent);
}

指示


等待站点加载完全(大约4秒直至站点加载指示器消失)然后右键点击在左侧滚动列表中的链接上,该链接应尽可能向下(这样您可以看到单击按钮后列表实际上正在向上滚动)。 现在应该出现一个容器:

现在点击<button> named This is a button并注意滚动列表滚动到顶部并且按钮中的代码未执行(应显示警报)。再次按该按钮,您会发现代码现已执行,并且在按警报上的“确定”后,滚动列表再次滚动到顶部。

接下来单击<div> named This is a div并注意一切都按预期进行。


该脚本存在几个问题,正如 Jim-miraidev 指出的那样,您需要使用 jQuery.on(), .stopPropagation(), and .preventDefault().

But the priority problem here is that the page has several other events at play (especially click and mouseup). The userscript code is causing the page's flexbox scroll state to get confused.
(Exhibit A: the scroll only happens on first click immediately after the mousedown event that fires showConfirmBox().)

因此,修补此问题的一个简单方法是捕获所有 3 个(潜在的)冲突事件:

$("div.mCSB_container").on ("click mousedown mouseup", "#theButton", function (zEvent) {
    zEvent.preventDefault ();
    zEvent.stopPropagation ();

    if (zEvent.type == "mousedown") {
        console.log ("Hello from Button");
    }
} );

请注意,浏览器按以下顺序触发事件:mousedown、mouseup、click。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTML - 单击按钮会导致列表因未知原因滚动到顶部 的相关文章

  • jquery从变量中删除html元素

    我将 html 保存在变量中 var itinerary events today html 我有很多 html 和一个按钮我想删除 它的 ID 为 myButton 如何从变量中保存的 html 中删除它 我建议这种方法 var itin
  • 在javascript中解析json - 长数字被四舍五入

    我需要解析一个包含长数字的 json 在 java servlet 中生成 问题是长数字被四舍五入 当执行这段代码时 var s x 6855337641038665531 var obj JSON parse s alert obj x
  • Iframe 相对路径挑战

    我有一个页面 在页面内有一个 Iframe 目录如下 Folder1 Folder2 IframeCSS IframeCSS Css iframePage1 html stuff css parentPage1 html 在 iframeP
  • Babel 7 Jest Core JS“TypeError:wks不是函数”

    将我的项目升级到 Babel 7 后 通过 Jest 运行测试会抛出以下错误 测试在 Babel 6 中运行没有任何问题 但在 Babel 7 中失败并出现以下错误 TypeError wks is not a function at Ob
  • Grails 在 javascript 内的 GSP 站点中使用 grails var

    我有一个在 GSP 文件中的 javascript 代码中使用 grails 变量值的问题 例如 我有一个会话值session getAttribute selectedValue 我想在 javascript 代码部分使用这个值 我现在的
  • Angular 2+ 安全性;保护服务器上的延迟加载模块

    我有一个 Angular 2 应用程序 用户可以在其中输入个人数据 该数据在应用程序的另一部分进行分析 该部分仅适用于具有特定权限的人员 问题是我们不想让未经授权的人知道how我们正在分析这些数据 因此 如果他们能够在应用程序中查看模板 那
  • 避免响应式页面的重复内容

    我目前正在做一个涉及响应式设计的项目 整个布局应该使用HTML和CSS来实现 我知道可以使用 java 脚本将内容从一个列布局移动到另一列布局 而无需复制内容 但是使用 HTML 和 CSS 是否可以实现相同的效果 以下面的例子为例 它会在
  • FireFox 中的自动滚动

    我的应用程序是实时聊天 我有一个 Div 来包装消息 每条消息都是一个 div 所以 在几条消息之后 我的 DOM 看起来像这样 div div Message number two div div div div
  • 如何获取给定 DOM 元素的所有定义的 CSS 选择器?

    如何使用 jQuery 获取给定 DOM 元素的所有定义的 CSS 选择器 定义后 我的意思是在应用于任何样式表的所有 CSS 选择器document 在某种程度上 这类似于 FireBug 实现的功能 其中显示所选 DOM 元素的所有应用
  • Javascript转换时区问题

    我在转换当前时区的日期时间时遇到问题 我从服务器收到此日期字符串 格式为 2015 10 09T08 00 00 这是中部时间 但是当我使用 GMT 5 中的 new Date strDate 转换此日期时间时 它返回给我的信息如下 这是不
  • 更改文本输入标签中文本的大小?

    我有一个很大的文本输入框 但我无法更改字体大小
  • 在 React.js 中编辑丰富的数据结构

    我正在尝试为数据结构创建一个简单的基于网格的编辑器 但我在使用 React js 时遇到了一些概念问题 他们的文档对此没有太大帮助 所以我希望这里有人可以提供帮助 首先 将状态从外部组件传输到内部组件的正确方法是什么 是否有可能将内部组件中
  • 使用 Ajax 请求作为源数据的 Jquery 自动完成搜索

    我想做的事 我想使用 jquery 自动完成函数创建一个输入文本字段 该函数从跨域curl 请求获取源数据 结果应该与此示例完全相同 CSS 在这里并不重要 http abload de img jquerydblf5 png http a
  • Schema.org 的常见问题解答页面

    我有一个常见问题解答页面 我想用更好的 html 架构来实现它
  • Javascript/Jquery:确定用户是否使用鼠标滚轮、滚动条或键盘滚动

    我正在尝试让用户界面正常工作 如果他们使用鼠标滚轮 我需要让它以一种方式滚动 如果他们使用滚动条 我需要让它以另一种方式滚动 如果他们使用键盘 我需要让它以另一种方式滚动 我相信滚轮和滚动条都充当鼠标事件 但是当单击滚动条时我无法让 jav
  • 导致回发到与弹出窗口不同的页面

    我有一个主页和一个详细信息页面 详细信息页面是从主页调用的 JavaScript 弹出窗口 当单击详细信息页面上的 保存 按钮时 我希望主页 刷新 是否有一种方法可以调用主页的回发 同时还可以从详细信息页面维护保存回发 Edit 使用win
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp
  • fullCalendar 未显示正确的结束日期

    我正在看调试页面 http jsbin com wukofacaxu edit js outputFullCalendar 官方网站的 我想安排一个活动时间为 22 09 2015 至 30 09 2015 dd mm yyyy 但它只显示
  • 如何从图像输入中获取 xy 坐标?

    我有一个输入设置为图像类型
  • CSS 是否有不等于选择器?

    CSS中有类似 不等于 的东西吗 例如 我有以下代码 input 但对于某些输入 我需要将其作废 我想通过将类 reset 添加到输入标签来做到这一点 例如

随机推荐

  • python:不可变的私有类变量?

    有没有办法把这个Java代码翻译成Python class Foo final static private List
  • 使用 Spring 设计 Java 库

    我正在将现有程序中的一些功能提取到一个单独的库中 该程序使用 Spring 进行依赖注入和其他任务 我也想继续在库中使用它 该库需要监视文件系统的更改 因此它将启动某种单独的线程来执行此操作 我真的不知道我的库初始化选项是什么 如何初始化库
  • 如何使用 selenium webdriver 自动化基于 Flash 的页面

    我是一名测试员 我们使用一种工具 其中包含使用 Flash 开发的页面 我需要自动化一些出于测试目的而重复的任务 我了解 Selenium Web 驱动程序 但我无法检查这些闪存页面上的任何元素 请帮助我解决这个问题 我玩过闪存硒 http
  • 如何使用 Socket 获取 Asterisk 服务器的状态 - Python

    我试图使用 python 套接字获取 Asterisk 服务器的状态 但没有任何反应 这是我的代码 import socket s socket socket socket AF INET socket SOCK STREAM HOST 1
  • 输出文件时使用Powershell环境变量作为字符串

    我在用获取 WindowsAutopilotInfo https www powershellgallery com packages Get WindowsAutoPilotInfo 3 5生成计算机的序列号和哈希代码并将该信息导出为 C
  • 在 CI/CD 中如何管理前端和后端之间的依赖关系?

    我将描述我的设置 以使问题不那么抽象 但它们似乎并不针对我的情况 Context 我们有 Python Django 后端和 VueJS 前端 每个都位于存储库中 并使用 Portainer 使用堆栈 配置和部署 Gitlab CI 每个存
  • F#:let mutable 与 ref

    首先 我承认这个问题可能是重复的 请告诉我 我很好奇当需要可变性时 一般的 最佳实践 是什么 F 似乎为此提供了两种工具 let mutable绑定 它的工作方式似乎类似于 大多数 语言中的变量 以及引用单元格 使用ref函数 需要显式解除
  • 在 Idris 中证明如果 n = m 且 m = o,则 n + m = m + o?

    我正在尝试通过查看一些练习来提高我的伊德里斯技能软件基础 https softwarefoundations cis upenn edu lf current toc html 最初是为 Coq 设计的 但我希望对 Idris 的翻译不会太
  • 为什么 QToolTips 不会出现在 QMenu 内的 QActions 上

    我正在用 GUI 编写一个应用程序PySide 我设置了一个QMenu on a QPushButton 添加了几个QActions via QMenu addAction 为了进一步向我添加的用户解释这些操作QToolTip与这些QAct
  • 64 位应用程序启动 32 位进程

    我正在开发一个使用 Net 4 0 C 编码的 64 位应用程序 在此应用程序中 在某些时候 我需要启动另一个exe使用以下代码创建文件 l process StartInfo FileName sFullFilePath l proces
  • iOS WKWebView 服务工作者

    从 iOS 15 开始 appCache 被禁用 所以我正在寻找替代方案 是否有启用 WKWebView Service Workers 的官方方法 我知道你可以添加 info plist 键WKAppBoundDomains然后通过实例化
  • 离子选项卡和侧面菜单历史记录

    我想在侧面菜单应用程序内放置一个选项卡式视图 但只是在应用程序的某些视图中 在应用程序中有以下状态结构 Login login menuContent Orders list app orders menuContent Descripti
  • 更改 Qt QML 中按钮的字体大小

    如何在 QML 中设置 Button 控件中文本的字体大小 设计者没有选择 并且 font 不是 Button 的有效属性 Button id cmdQuit text qsTr Quit width 64 height 32 您设置按钮的
  • Firebase v9 上传图片仅显示 9 个字节

    我使用 React Native 和 Firebase v9 将图像上传到 Firebase 在 firebase 存储中 文件已上传 但大小只有 9 个字节 因此无法正常打开 我不知道如何解决这个问题 S const uploadFile
  • DELPHI - 如何更改 VCL 表单应用程序中的 TButton 背景颜色?

    在我的 Delphi VCL 表单应用程序中 我必须更改 TButton 的背景颜色 有没有办法在不使用第三方组件的情况下应用此更改 Thanks 你不能改变 a 的颜色TButton http docwiki embarcadero co
  • 插件 org.jetbrains.android 无法保存设置并已被禁用

    启动 Android Studio 1 2 时 我收到错误消息 插件 org jetbrains android 无法保存设置并已 残疾人 我尝试重新启动 甚至下载了最新的 Android 插件 但没有帮助 有什么建议么 我遇到了同样的问题
  • C# 获取给定路径的文件夹深度的最佳方法?

    我正在做一些需要遍历文件系统的事情 对于任何给定的路径 我需要知道我在文件夹结构中的 深度 这是我目前正在使用的 int folderDepth 0 string tmpPath startPath while Directory GetP
  • 通过服务有角度地加载本地json文件

    我正在尝试在与我的服务文件相同的目录中加载本地 json 文件 没有 JS 错误 在 Net 选项卡下 我可以看到 json 文件已加载 然而 将响应 txt 设置为 var static obj 不会加载 JSON 数据 当我将 JSON
  • 如何在 jQuery 中捕获 COMMAND+S?

    我正在开发一个网络应用程序 我试图让 CTRL S 和 COMMAND S 作为保存的快捷键 我看过http www openjs com scripts events keyboard shortcuts http www openjs
  • HTML - 单击按钮会导致列表因未知原因滚动到顶部

    我正在使用 tampermonkey 添加一些自定义按钮Unity文档 https docs unity3d com Manual 我注意到一个奇怪的问题如果我使用 html