2017-04-24 1 views
0

Cette partie d'une question que j'ai posée ici la semaine dernière. Il a répondu, sauf que maintenant je vais utiliser cette fonction à plusieurs reprises, et au lieu de répéter les fonctions multiples fois, je veux utiliser des arguments/paramètres, mais il y a des problèmes ....Javascript: Mon booléen ne reste pas vrai après qu'il a été déclaré vrai dans une fonction

html:

<button id="button1">a</button> 
<button id="button2">b</button> 

javascript:

var funcAPressed = false; 

var funcA = function(x, y) { 
    alert(x); 
    y = true; 
    alert(y); 
}; 
var funcB = function(x, y) { 
    if (funcAPressed === false){ 
    alert(x); 
    } 
    else{ 
    alert(y); 
    } 
}; 

var buttonA = document.getElementById('button1'); 
buttonA.addEventListener('click', function(){funcA("Button A has been pressed", funcAPressed);}); 

var buttonB = document.getElementById('button2'); 
buttonB.addEventListener('click', function(){funcB("press Button A", "Button B has been pressed");}); 

Voilà comment tout cela est mis en place: Je veux que l'utilisateur d'appuyer sur les boutons dans l'ordre correct, A puis B. si B est pressé d'abord, il y a un message d'alerte. La réponse que j'ai donnée à ma question précédente ici était de créer un booléen et de le définir sur false, ce que j'ai fait en haut. Quand je clique sur le bouton, j'obtiens le message d'alerte ci-dessous, et il semble que funcAPressed devient vrai depuis que j'ai fait l'alerte (y) qui alerte "true".

Le problème est que lorsque je clique sur le bouton B après avoir cliqué sur le bouton A, il voit toujours funcAPressed = false au lieu que ce soit vrai. Le funcB fonctionnera bien si au lieu de y = true j'ai funcAPressed = true ... mais en faisant cela, je vais devoir copier cette fonction plusieurs fois dans mon document au lieu de pouvoir l'utiliser une seule fois et assigner des paramètres.

+0

vous pensiez que funcAPressed a été passé par référence, et lorsque vous définissez y true, vous suppose que funcAPressed a été définie sur true droite? Lisez cette réponse: http://stackoverflow.com/a/13104500/916000 –

Répondre

0

Veuillez comprendre funcAPressed != y à l'intérieur du funA .vous ne passez que la valeur de la variable, pas la variable. vous remplacez la valeur de y pas funcAPressed varible .donc remplacer directement la valeur variable à l'aide funcAPressed = true

var funcAPressed = false; 
 

 
var funcA = function(x, y) { 
 
console.log(x) 
 
    funcAPressed = true; 
 
    console.log(); 
 
}; 
 
var funcB = function(x, y) { 
 
    if (funcAPressed === false) { 
 
    console.log(x); 
 
    } else { 
 
    console.log(y); 
 
    } 
 
}; 
 

 
var buttonA = document.getElementById('button1'); 
 
buttonA.addEventListener('click', function() { 
 
    funcA("Button A has been pressed", funcAPressed); 
 
}); 
 

 
var buttonB = document.getElementById('button2'); 
 
buttonB.addEventListener('click', function() { 
 
    funcB("press Button A", "Button B has been pressed"); 
 
});
<button id="button1">a</button> 
 
<button id="button2">b</button>

+0

Je comprends ce que vous dites, mais la raison pour laquelle je ne ferai pas funcAPressed = true dans funcA est parce que je vais faire ce genre de la fonction plusieurs fois sur la page. Si funcAPressed est déclaré vrai dans une seule instance, il sera vrai dans chaque instance après cela. J'ai besoin que ce genre de vérification arrive plus d'une fois. – 00Saad

0

essayer.

var funcAPressed = false; 
 

 
var funcA = function(x, y) { 
 
    if (funcAPressed === false && y== "btnB"){ 
 
    console.log("please press button a"); 
 
    }else{ 
 
    funcAPressed = true; 
 
    console.log(x); 
 
    } 
 
}; 
 

 
var buttonA = document.getElementById('button1'); 
 
buttonA.addEventListener('click', function(){funcA("Button A has been pressed", "btnA");}); 
 

 
var buttonB = document.getElementById('button2'); 
 
buttonB.addEventListener('click', function(){funcA("Button B has been pressed", "btnB");});
<button id="button1">a</button> 
 
<button id="button2">b</button>