Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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_Sockets_Debugging_Button_Listener - Fatal编程技术网

按钮侦听器JavaScript

按钮侦听器JavaScript,javascript,sockets,debugging,button,listener,Javascript,Sockets,Debugging,Button,Listener,我有一个有趣的bug,我不知道它是否来自javascript中我忽略的一点,但它毫无意义 这是一个小型的消息传递应用程序,您可以在其中玩chifoumi 在这张照片中,我们收到了两个游戏请求,其特征是“应答(Répondre au-jeu)”按钮,当我们应答时,该按钮被禁用!到目前为止是的,但问题是,你在这里看到的第一个按钮不再被监听,事实上,这就好像与按钮相关联的侦听器已经自行飞行一样 所以我不明白为什么按钮失去了它的侦听器;知道在点击另一个按钮之前,它可以完美地工作(按下按钮只会填充底部

我有一个有趣的bug,我不知道它是否来自javascript中我忽略的一点,但它毫无意义

这是一个小型的消息传递应用程序,您可以在其中玩chifoumi

在这张照片中,我们收到了两个游戏请求,其特征是“应答(Répondre au-jeu)”按钮,当我们应答时,该按钮被禁用!到目前为止是的,但问题是,你在这里看到的第一个按钮不再被监听,事实上,这就好像与按钮相关联的侦听器已经自行飞行一样

所以我不明白为什么按钮失去了它的侦听器;知道在点击另一个按钮之前,它可以完美地工作(按下按钮只会填充底部的文本框,如果我不发送它,按钮将保持活动状态)

这是我的密码:

socket.on("chifoumi", function(result) {

    var win = document.getElementById("content");

    var date = new Date(result.date);
    var hours = date.getHours();
    var minutes = date.getMinutes();
    var seconds = date.getSeconds();

    if (date.getHours() < 10)
        hours = "0" + date.getHours();
    if (date.getMinutes() < 10)
        minutes = "0" + date.getMinutes();
    if (date.getSeconds() < 10)
        seconds = "0" + date.getSeconds();

    let main = document.getElementsByTagName("MAIN");

    if (result.from == currentPseudo) {
        main[0].innerHTML += "<p class=\"chifoumi\">" + hours + ":" + minutes + ":" +
            seconds + " - [chifoumi] : Défi envoyé à " + result.to + "</p>";
    } else if (result.from != currentPseudo) {


        main[0].innerHTML += "<p class=\"chifoumi\">" + hours + ":" + minutes + ":" +
            seconds + " - [chifoumi] : " + result.from + " te défi à Paper-Rock-Scissors-Lizard-Spock. <button class=" + result.from + " name = \"btn\"> Répondre au jeu </button></p > ";
        win.className = "buzz";
        buttonListener();

    }
});
我认为我剩下的代码对你没有任何好处。我不接触其他地方的听众


我提前向您表示感谢。

代表用户253751回答

这可能是因为您正在设置innerHTML。通过设置innerHTML,您告诉浏览器删除main[0]中的所有内容,然后将innerHTML字符串中的内容添加回。但是innerHTML字符串没有任何事件侦听器。所以,你没有得到一个。尝试改用appendElement,它会添加一个新元素,而不会更改任何其他元素


按钮被禁用了吗?如果禁用,则不会检测到任何单击事件。我说的是第一个保持活动状态的按钮,很抱歉,我已修复了键入错误。如果代码进入
result.from==currentPseudo
,则不会添加任何事件侦听器。此条件只会使发送方与质询方和接收方区分开来,在我们的情况下,我们是接受者,所以我们总是进入另一个世界。而且,在你点击任何按钮之前,它们都可以工作!侦听器在那里,单击按钮,然后发送,删除与此按钮关联的侦听器。怎么可能呢?事实上,点击按钮会在底部显示一个文本。在我发送响应之前,按钮不会关闭。在发送之前,按钮都会在底部显示不同的文本!但是,如果我单击发送,那么目标按钮将停用此功能(这是正常的),但另一个将丢失其侦听器。
function buttonListener() {

    let btn = document.getElementsByName("btn");
    console.log(btn);
    for (let bt of btn) {
        ////LISTENER MULTI BOUTON
        console.log(bt);
        bt.addEventListener("click", function(e) {
            startGame = 1;
            msgChiff = "/chifoumi @" + this.className + " :";
            document.getElementById("monMessage").value = "/chifoumi @" + this.className + " :";
        });
    }
}