Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.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 停止用户脚本自动单击_Javascript_Html_Userscripts - Fatal编程技术网

Javascript 停止用户脚本自动单击

Javascript 停止用户脚本自动单击,javascript,html,userscripts,Javascript,Html,Userscripts,下面的代码是我创建的JavaScript用户脚本的一部分,用于在Reddit上的特定子Reddit上添加注释按钮: // ==UserScript== // @name Assholedesign Repost Commenter // @namespace Reddit // @version 0.1 // @description Add repost buttons to r/assholedesign // @author Duncan Ya

下面的代码是我创建的JavaScript用户脚本的一部分,用于在Reddit上的特定子Reddit上添加注释按钮:

// ==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);

此脚本当前已禁用,因为在加载页面时,它会自动单击一个或多个按钮。如何修复此问题,使错误的单击不再出现?

问题在于您的
addEventListener
回调会立即运行

函数(如
addEventListener
)中的回调必须是一个不会立即运行的函数

例如,注入代码后,以下内容将立即发出警报('Hello')

target.addEventListener('click', alert('Hello'));
但是,正确的方法是将其封装在如下函数中:

target.addEventListener('click', function() { alert('Hello'); });
以上仅在触发事件后运行

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

a00.addEventListener("click", repost_text("Repost"));
将其更改为:

a00.addEventListener("click", function() { repost_text("Repost"); });
或箭头功能:

a00.addEventListener("click", () => repost_text("Repost"));
仅供参考,如果您不想将数据传递给函数,以下操作也可以:

a00.addEventListener("click", repost_text);