我有聊天面板的游戏,我有两个功能来发送和重复我的消息。
我想点击"停止"停止我的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);
答案 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)
那里有很多奇怪的事情。
打破2个功能,这样就不会在点击时创建它们。
要停止点击,即使您必须使用处理程序添加点击事件,类似于您在顶部所做的操作。不要用if ($('something').click())
来调用它,而是触发点击该元素。
您不是垃圾邮件,因为设置超时只运行一次。您可能正在寻找setInterval
?在这种情况下,您使用clearInterval
来停止它。