2017-04-16 3 views
0

Dies wurde wahrscheinlich schon vorher behandelt, aber was ich online sehe, ist verwirrend oder zumindest zu fortgeschritten für einen Anfänger wie mich. Hier ist ein Beispiel ....Wie kann ich in Javascript verhindern, dass die zweite Funktion ausgeführt wird, wenn nicht die erste Funktion aufgerufen wurde?

Wenn ich auf Button A oder Button B in beliebiger Reihenfolge klicke, funktionieren sie; aber ich will Button B nicht funktionieren, es sei denn Taste A wurde zuerst geklickt. Mit dem Code, den ich jetzt habe, wird die if-Anweisung in funcB nie ausgeführt, aber die else-Anweisung wird immer ausgeführt.

+0

Verwenden Sie einfach eine boolesche Flagge ... –

Antwort

1

Ich könnte eine Variable erstellen, die als Schalter effektiv funktionieren würde, die Sie treffen, wenn Sie Funktion A. laufen:

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;

+0

Ich ging mit diesem Vorschlag. Ich sage im Grunde, dass var funcAPressed = false. So wird es sein, wenn nicht anders angegeben. Wenn funcA ausgeführt wird, wird funcAPressed jetzt als wahr deklariert. Wenn funcAPressed false ist, was standardmäßig der Fall ist, wird die if-Anweisung in funcB ausgeführt. Aber wenn funcAPressed wahr wird, was nach dem Aufruf von funcA geschieht, wird die else-Anweisung in func B ausgeführt. – 00Saad

1

Der Codeblock in der folgenden if Anweisung wird nie laufen Weil funcA kein boolescher Wert ist, ist es eine Funktion, die keinen Rückgabewert hat.

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

Was kann man aber tun, ist nur eine boolean deklarieren, die als Flag dient, etwa so:

(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>

0

Gerade Taste B das Verhalten in der Klick-Handler-Taste ändern A:

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>

0

Dies könnte schmutzig sein, sondern kann `arbeiten

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>

`

0

Ich glaube, Sie haben bereits die Antwort bekommen, aber nur hinzufügen, dass, wenn Sie tun:

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

Und später überprüfen:

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

Dann wird funcA nicht falsch sein. Der Grund dafür ist, dass Sie der Variablen funcA ein Funktionsobjekt zugewiesen haben und daher truthy ist. Es repräsentiert nicht die Tatsache, dass Button1 früher gedrückt wurde oder nicht. Javascript unterscheidet sich von anderen klassischen Sprachen und kann daher in JavaScript einer Variablen zugewiesen werden. Hoffe es hilft dir, die Sprache besser zu lernen!

+0

Ich werde diese Antwort nicht abstimmen, aber könnten Sie das Problem erklären, auf das diese Antwort geschrieben wurde?Von meinem eigenen Lesen will das OP 'funcB()' nur aufrufen/aktivieren, nachdem 'funcA()' aufgerufen und ausgeführt wurde, was diese Antwort nicht zu adressieren scheint. –

+0

Was ich hier zu erklären versuche ist, warum seine Erwartung in dem Code, den er schrieb, falsch war. Dies ist in der Hoffnung, dass es ihm hilft, die Ursache des Problems zu verstehen. –

+0

Ich verstehe, was du sagst, FuncA kann nicht falsch sein, da ich es zu einer Variablen deklariert und definiert habe ... dann existiert es ... richtig? Ich ging mit Jeremy Vorschlag, es ist die einfachste und etwas, was ich verstehen kann: Ich deklariere var funcAPressed = false in den globalen Bereich. Daher wird funcAPressed immer falsch sein, wenn nicht anders angegeben. Aber wenn funcA aufgerufen wird, passiert funcAPressed = true ... und macht das wahr. Und die if-Anweisung in funcB wird nur ausgeführt, wenn funcAPressed = false ist. Ich werde es wahrscheinlich alles falsch erklären, aber es ist etwas, das ich verstehe und umsetzen konnte. – 00Saad

Verwandte Themen