在 Javascript 中,如何防止第二个函数在 运行 中执行,除非已调用第一个函数?
In Javascript, how can I prevent the second function from running unless the first function has been invoked?
这可能以前已经介绍过,但我在网上看到的内容令人困惑,或者至少对于像我这样的初学者来说太高级了。这是一个例子....
var funcA = function() {
alert("Button A has been pressed");
};
var funcB = function() {
if (funcA === false){
alert("press Button A");
}
else{
alert("Button B has been pressed");
}
};
var buttonA = document.getElementById('button1');
buttonA.onclick = funcA;
var buttonB = document.getElementById('button2');
buttonB.onclick = funcB;
如果我以任何顺序点击按钮 A 或按钮 B,它们都会起作用;但我不希望按钮 B 工作,除非首先单击按钮 A。使用我现在的代码,funcB 中的 if 语句从不运行,但 else 语句始终运行。
我可能会创建一个变量,它可以有效地充当您在 运行 函数 A 时按下的开关。:
var funcAPressed = false;
var funcA = function() {
alert("Button A has been pressed");
funcAPressed = true;
};
var funcB = function() {
if (funcAPressed === false){
alert("press Button A");
}
else{
alert("Button B has been pressed");
}
};
var buttonA = document.getElementById('button1');
buttonA.onclick = funcA;
var buttonB = document.getElementById('button2');
buttonB.onclick = funcB;
以下 if
语句中的代码块永远不会 运行 因为 funcA
不是布尔值,它是一个没有 return 值的函数。
if (funcA === false){
alert("press Button A");
}
然而,您可以做的只是声明一个用作标志的布尔值,如下所示:
(function() {
let called = false;
var funcA = function() {
called = true;
alert("Button A has been pressed");
};
var funcB = function() {
if (!called) {
alert("press Button A");
} else {
alert("Button B has been pressed");
}
};
var buttonA = document.getElementById('button1');
buttonA.onclick = funcA;
var buttonB = document.getElementById('button2');
buttonB.onclick = funcB;
})();
<button id="button1">button 1</button>
<button id="button2">button 2</button>
只需在按钮 A 的点击处理程序中更改按钮 B 的行为:
document.getElementById('a').onclick = () => {
alert("Button A has been pressed");
document.getElementById('b').onclick = () => {alert("Button B has been pressed") };
}
document.getElementById('b').onclick = () => { alert("press Button A") };
<button id="a">a</button>
<button id="b">b</button>
这可能很脏,但可以工作`
var count = 0;
function funcA(){
count = 1;
}
function funcB(){
if(count == 1){
alert("OKAy!")
}else{
alert("Press Button A");
}
}
<button id="a" onclick="funcA();">A</button>
<button id= "b" onclick="funcB();">B</button>
`
我想你已经得到了答案,但只是在你做的时候补充一下:
var funcA = function() {
alert("Button A has been pressed");
}
稍后检查:
if (funcA === false){
alert("press Button A");
}
那么funcA就不会为false。原因是您已将函数对象分配给 funcA 变量,因此它是真实的。它并不代表 button1 是否已被较早按下的事实。 Javascript 与其他经典语言不同,因此在 javascript 中可以将函数分配给变量。希望它能帮助你更好地学习语言!
这可能以前已经介绍过,但我在网上看到的内容令人困惑,或者至少对于像我这样的初学者来说太高级了。这是一个例子....
var funcA = function() {
alert("Button A has been pressed");
};
var funcB = function() {
if (funcA === false){
alert("press Button A");
}
else{
alert("Button B has been pressed");
}
};
var buttonA = document.getElementById('button1');
buttonA.onclick = funcA;
var buttonB = document.getElementById('button2');
buttonB.onclick = funcB;
如果我以任何顺序点击按钮 A 或按钮 B,它们都会起作用;但我不希望按钮 B 工作,除非首先单击按钮 A。使用我现在的代码,funcB 中的 if 语句从不运行,但 else 语句始终运行。
我可能会创建一个变量,它可以有效地充当您在 运行 函数 A 时按下的开关。:
var funcAPressed = false;
var funcA = function() {
alert("Button A has been pressed");
funcAPressed = true;
};
var funcB = function() {
if (funcAPressed === false){
alert("press Button A");
}
else{
alert("Button B has been pressed");
}
};
var buttonA = document.getElementById('button1');
buttonA.onclick = funcA;
var buttonB = document.getElementById('button2');
buttonB.onclick = funcB;
以下 if
语句中的代码块永远不会 运行 因为 funcA
不是布尔值,它是一个没有 return 值的函数。
if (funcA === false){
alert("press Button A");
}
然而,您可以做的只是声明一个用作标志的布尔值,如下所示:
(function() {
let called = false;
var funcA = function() {
called = true;
alert("Button A has been pressed");
};
var funcB = function() {
if (!called) {
alert("press Button A");
} else {
alert("Button B has been pressed");
}
};
var buttonA = document.getElementById('button1');
buttonA.onclick = funcA;
var buttonB = document.getElementById('button2');
buttonB.onclick = funcB;
})();
<button id="button1">button 1</button>
<button id="button2">button 2</button>
只需在按钮 A 的点击处理程序中更改按钮 B 的行为:
document.getElementById('a').onclick = () => {
alert("Button A has been pressed");
document.getElementById('b').onclick = () => {alert("Button B has been pressed") };
}
document.getElementById('b').onclick = () => { alert("press Button A") };
<button id="a">a</button>
<button id="b">b</button>
这可能很脏,但可以工作`
var count = 0;
function funcA(){
count = 1;
}
function funcB(){
if(count == 1){
alert("OKAy!")
}else{
alert("Press Button A");
}
}
<button id="a" onclick="funcA();">A</button>
<button id= "b" onclick="funcB();">B</button>
`
我想你已经得到了答案,但只是在你做的时候补充一下:
var funcA = function() {
alert("Button A has been pressed");
}
稍后检查:
if (funcA === false){
alert("press Button A");
}
那么funcA就不会为false。原因是您已将函数对象分配给 funcA 变量,因此它是真实的。它并不代表 button1 是否已被较早按下的事实。 Javascript 与其他经典语言不同,因此在 javascript 中可以将函数分配给变量。希望它能帮助你更好地学习语言!