无法停止正确的JS功能

时间:2018-02-25 12:10:08

标签: javascript onclick chat break

我有聊天面板的游戏,我有两个功能来发送和重复我的消息。

我想点击"停止"停止我的reapeat功能。按钮。我做了这样的事情,但是这样我就崩溃了所有的游戏时间。我在哪里做错了?

$("#start-spam").click(function () {

    var numberOfMessages = 9999; //$("#spambot-wiadomosci").val();

    var messagesSendingSpeed = 1; //$("#spambot-szybkosc").val();

    var messageToSend = $("#spam-input").val();

    var numberOfSendedMessages = 0;

    function sendMessage(messageToSend) {
    document.getElementById("chat_textbox").value = messageToSend;
    var e = new Event("keydown");
    e.key = 13;
    e.keyCode = 13;
    e.wich = 13;
    window.dispatchEvent(e);
    window.dispatchEvent(e);
};

function repeatMessage(messageToSend, numberOfMessages, messagesSendingSpeed) {
    setTimeout(function() {
        sendMessage(messageToSend);
        numberOfSendedMessages++;
        if(numberOfSendedMessages < numberOfMessages) {
            repeatMessage(messageToSend, numberOfMessages, messagesSendingSpeed);
        }
    }, messagesSendingSpeed);

    if($("#stop-spam").click()){
        return true;
    }
};
repeatMessage(messageToSend, numberOfMessages, messagesSendingSpeed);

2 个答案:

答案 0 :(得分:0)

当你不带参数调用[.click()] [1]方法时,它会返回一个jQuery对象。

如果要将操作与click事件关联,则必须将函数作为参数传递

$("#stop-spam").click(function() {
  console.log('clicked on the button');
  // more code
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button type="button" id="stop-spam">stop</button>

要停止操作,可以通过多种方式改进逻辑,但从当前状态来看,最简单的方法可能是使用布尔值来检查是否再次执行该函数。

var keepGoing = true;

function repeatMessage(messageToSend, numberOfMessages, messagesSendingSpeed) {
    setTimeout(function() {
        sendMessage(messageToSend);
        numberOfSendedMessages++;
        if (keepGoing ) {
            if (numberOfSendedMessages < numberOfMessages) {
                repeatMessage(messageToSend, numberOfMessages, messagesSendingSpeed);
            }
        }
    }, messagesSendingSpeed);
};


$("#stop-spam").click(function() {
  console.log('clicked on the button');
  keepGoing = false;
});

答案 1 :(得分:0)

那里有很多奇怪的事情。

  1. 打破2个功能,这样就不会在点击时创建它们。

  2. 要停止点击,即使您必须使用处理程序添加点击事件,类似于您在顶部所做的操作。不要用if ($('something').click())来调用它,而是触发点击该元素。

  3. 您不是垃圾邮件,因为设置超时只运行一次。您可能正在寻找setInterval?在这种情况下,您使用clearInterval来停止它。