首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止UserScript自动单击

停止UserScript自动单击
EN

Stack Overflow用户
提问于 2020-03-22 01:23:22
回答 1查看 35关注 0票数 0

下面的代码是我创建的JavaScript UserScript的一部分,用于在Reddit上的特定subreddit上添加评论按钮:

代码语言:javascript
复制
// ==UserScript==
// @name         Assholedesign Repost Commenter
// @namespace    Reddit
// @version      0.1
// @description  Add repost buttons to r/assholedesign
// @author       Duncan Yang
// @include      https://*.reddit.com/r/assholedesign/comments/*
// @include      http://*.reddit.com/r/assholedesign/comments/*
// @run-at document-start
// ==/UserScript==

window.addEventListener("DOMContentLoaded", function() {
    var edit_form = document.querySelector("form > div.usertext-edit").parentNode;
    var btns = edit_form.querySelector("div.usertext-edit > div.bottom-area > div.usertext-buttons");
    var save_btn = btns.querySelector("button.save");
    var edit_textbox = edit_form.querySelector("div.usertext-edit > div > textarea");

    var repost_text = function(a) {
        edit_textbox.value = a;
        console.log(a);
    }

    try
    {
        var cancel_btn = btns.querySelector("button.cancel");

        var a00 = document.createElement("button");
        var a01 = document.createElement("button");
        var a02 = document.createElement("button");

        // This section of code is
        a00.setAttribute("class", "save");
        a00.innerHTML = "Repost";
        a00.addEventListener("click", repost_text("Repost"));
        a01.setAttribute("class", "save");
        a01.innerHTML = "General Repostii";
        a01.addEventListener("click", repost_text("[General Repostii](https://reddit.com/r/assholedesign/wiki/common_topics)"));
        a02.setAttribute("class", "save");
        a02.innerHTML = "Cold One";
        a02.addEventListener("click", repost_text("[General Repostii, you are a cold one.](https://reddit.com/r/assholedesign/wiki/common_topics)"));
        // where I am having problems.

        btns.insertBefore(a00, cancel_btn);
        btns.insertBefore(a01, cancel_btn);
        btns.insertBefore(a02, cancel_btn);
    }
    catch (err)
    {
        console.log(err);
    }
}, false);

此脚本当前被禁用,因为它在加载页面时自动单击一个或多个按钮存在问题。我怎样才能解决这个问题,让错误的点击不再存在?

EN

回答 1

Stack Overflow用户

发布于 2020-03-22 03:37:30

问题出在你的addEventListener回调函数,它会立即运行。

addEventListener等函数中的回调需要是一个不会立即运行的函数。

例如,下面的代码将在注入代码后立即执行alert('Hello')

代码语言:javascript
复制
target.addEventListener('click', alert('Hello'));

但是,正确的方法是将其封装在如下的函数中:

代码语言:javascript
复制
target.addEventListener('click', function() { alert('Hello'); });

上面的代码只有在事件触发后才会运行。

在您的代码中,将立即运行以下代码。

代码语言:javascript
复制
a00.addEventListener("click", repost_text("Repost"));

将其更改为:

代码语言:javascript
复制
a00.addEventListener("click", function() { repost_text("Repost"); });

或箭头函数:

代码语言:javascript
复制
a00.addEventListener("click", () => repost_text("Repost"));

仅供参考,如果您不想将数据传递给该函数,也可以使用以下代码:

代码语言:javascript
复制
a00.addEventListener("click", repost_text);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60790957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档