在Javascript中,除非调用了第一个函数,否则如何防止第二个函数运行?

时间:2017-04-16 20:07:19

标签: javascript function invoke

之前可能已经介绍过,但我在网上看到的内容令人困惑,或者对于像我这样的初学者来说至少太先进了。这是一个例子....

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,它们会起作用;但除非先点击按钮A,否则我不希望按钮B工作。使用我现在的代码,funcB中的if语句永远不会运行,但else语句总是运行。

5 个答案:

答案 0 :(得分:1)

我可能会创建一个变量,它可以有效地用作运行函数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;




答案 1 :(得分:0)

以下if语句中的代码块永远不会运行,因为funcA不是布尔值,它是一个没有返回值的函数。

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>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

只需在按钮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>

答案 3 :(得分:0)

这可能很脏但可以工作`

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>

`

答案 4 :(得分:0)

我认为你已经得到了答案,但只是在你这样做时添加:

var funcA = function() {
  alert("Button A has been pressed");
}

稍后检查:

if (funcA === false){
    alert("press Button A");
}

然后funcA不会是假的。原因是你已经为funcA变量分配了一个函数对象,因此它是真实的。它并不代表button1先前已被按下的事实。 Javascript与其他经典语言不同,因此可以将javascript函数分配给变量。希望它能帮助您更好地学习语言!