单击按钮时使功能停止工作(javascript)
Make a function stop working when a button is clicked(javascrpt)
我想让 function
在单击 Javascript 中的按钮时停止工作。
我尝试使用if
语句来检查按钮是否被点击。另外,我试图在另一个函数中满足特定条件时使该函数停止工作。
但是,还是不行了。
有谁知道如何让它工作以及为什么 onclick == true
不再工作了?
let textarea = document.getElementsByTagName('textarea')[0]
let message = document.getElementById('message')
function clicks() {
console.log('hi')
//I want to make the appear function stop working when this function is executing.
}
function appear() {
//this is not working
if (document.getElementsByTagName('button')[0].onclick == true) {
message.style.display = 'none'
console.log('it works')
} else {
message.style.display = 'revert'
textarea.value = textarea.value.trimStart();
}
};
<textarea></textarea>
<div id="message">.....</div>
<button onclick="clicks()">split(20px)</button>
onclick
是一个事件,当 click
事件发生时触发。因此,onclick
不存储状态。您需要创建对 clicks
和 appear
函数可见的变量,并使用它来标识停止执行函数 appear
.
的标志
let textarea = document.getElementsByTagName('textarea')[0];
let message = document.getElementById("message");
let stopButtonClicked = false;
function clicks() {
console.log("hi");
stopButtonClicked = true;
}
function appear() {
if (stopButtonClicked) {
message.style.display = "none";
console.log("it works");
} else {
message.style.display = "revert";
textarea.value = textarea.value.trimStart();
}
}
您需要应用信号量逻辑,例如:
let beingClicked = false;
function clicks() {
beingClicked = true;
console.log('hi');
//I want to make the appear function stop working when this function is executing.
beingClicked = false;
}
function appear() {
//this is not working
if (beingClicked) {
message.style.display = 'none'
console.log('it works')
} else {
message.style.display = 'revert'
textarea.value = textarea.value.trimStart();
}
};
请注意,在 function
的开头,我们将信号量 (beingClicked
) 设置为红色(在本例中为 true
)并在 function
我们设置为false
.
需要注意的是,还有两个问题需要考虑:
1
您可能需要为其他按钮重复使用此逻辑。如果是这样,那么您可以考虑以下几点:
function ButtonSemaphore(button) {
let semaphore = false;
let events = [];
button.addEventListener("click", function(evt) {
semaphore = true;
for (let event of events) event(evt);
semaphore = false;
});
function isRed() {
return semaphore;
}
function isGreen() {
return !semaphore;
}
function addEvent(callback) {
events.push(callback);
}
}
您可以通过将其命名为 let myButtonSemaphore = new ButtonSemaphore(button)
来实例化它,其中 button
是一个有效的按钮。每当您想向其中添加事件时,只需调用 myButtonSemaphore.addEvent(function(evt) {/* Some code */})
。请注意,在所有事件之前和所有事件之后处理事件数组并正确设置信号量。
2
您可能需要重用它,因此建议创建一个自己的 .js 文件,这样您的代码将只存在一次,并且可以在需要时导入。
let textarea = document.getElementsByTagName('textarea')[0]
let message = document.getElementById('message')
function clicks() {
console.log('hi')
//I want to make the appear function stop working when this function is executing.
}
function appear() {
//this is not working
if (document.getElementsByTagName('button')[0].onclick == true) {
message.style.display = 'none'
console.log('it works')
} else {
message.style.display = 'revert'
textarea.value = textarea.value.trimStart();
}
};
<textarea></textarea>
<div id="message">.....</div>
<button onclick="clicks()">split(20px)</button>
我想让 function
在单击 Javascript 中的按钮时停止工作。
我尝试使用if
语句来检查按钮是否被点击。另外,我试图在另一个函数中满足特定条件时使该函数停止工作。
但是,还是不行了。
有谁知道如何让它工作以及为什么 onclick == true
不再工作了?
let textarea = document.getElementsByTagName('textarea')[0]
let message = document.getElementById('message')
function clicks() {
console.log('hi')
//I want to make the appear function stop working when this function is executing.
}
function appear() {
//this is not working
if (document.getElementsByTagName('button')[0].onclick == true) {
message.style.display = 'none'
console.log('it works')
} else {
message.style.display = 'revert'
textarea.value = textarea.value.trimStart();
}
};
<textarea></textarea>
<div id="message">.....</div>
<button onclick="clicks()">split(20px)</button>
onclick
是一个事件,当 click
事件发生时触发。因此,onclick
不存储状态。您需要创建对 clicks
和 appear
函数可见的变量,并使用它来标识停止执行函数 appear
.
let textarea = document.getElementsByTagName('textarea')[0];
let message = document.getElementById("message");
let stopButtonClicked = false;
function clicks() {
console.log("hi");
stopButtonClicked = true;
}
function appear() {
if (stopButtonClicked) {
message.style.display = "none";
console.log("it works");
} else {
message.style.display = "revert";
textarea.value = textarea.value.trimStart();
}
}
您需要应用信号量逻辑,例如:
let beingClicked = false;
function clicks() {
beingClicked = true;
console.log('hi');
//I want to make the appear function stop working when this function is executing.
beingClicked = false;
}
function appear() {
//this is not working
if (beingClicked) {
message.style.display = 'none'
console.log('it works')
} else {
message.style.display = 'revert'
textarea.value = textarea.value.trimStart();
}
};
请注意,在 function
的开头,我们将信号量 (beingClicked
) 设置为红色(在本例中为 true
)并在 function
我们设置为false
.
需要注意的是,还有两个问题需要考虑:
1
您可能需要为其他按钮重复使用此逻辑。如果是这样,那么您可以考虑以下几点:
function ButtonSemaphore(button) {
let semaphore = false;
let events = [];
button.addEventListener("click", function(evt) {
semaphore = true;
for (let event of events) event(evt);
semaphore = false;
});
function isRed() {
return semaphore;
}
function isGreen() {
return !semaphore;
}
function addEvent(callback) {
events.push(callback);
}
}
您可以通过将其命名为 let myButtonSemaphore = new ButtonSemaphore(button)
来实例化它,其中 button
是一个有效的按钮。每当您想向其中添加事件时,只需调用 myButtonSemaphore.addEvent(function(evt) {/* Some code */})
。请注意,在所有事件之前和所有事件之后处理事件数组并正确设置信号量。
2
您可能需要重用它,因此建议创建一个自己的 .js 文件,这样您的代码将只存在一次,并且可以在需要时导入。
let textarea = document.getElementsByTagName('textarea')[0]
let message = document.getElementById('message')
function clicks() {
console.log('hi')
//I want to make the appear function stop working when this function is executing.
}
function appear() {
//this is not working
if (document.getElementsByTagName('button')[0].onclick == true) {
message.style.display = 'none'
console.log('it works')
} else {
message.style.display = 'revert'
textarea.value = textarea.value.trimStart();
}
};
<textarea></textarea>
<div id="message">.....</div>
<button onclick="clicks()">split(20px)</button>