2017-04-24 4 views
0

지난 주 여기에서 물어 본 질문의 일부입니다. 그것은 .... 지금은이 기능을 여러 번 사용하려고하고, 대신에 내가 인수/매개 변수를 사용하려는 함수를 여러 번 반복하고있어 제외하고, 대답,하지만 문제가 있습니다되었다Javascript : 함수에서 true로 선언 된 후 내 부울은 true로 유지되지 않습니다.

HTML :

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

자바 스크립트 :

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");}); 

다음은이 모든 설정 방법은 다음과 같습니다 나는 사용자가 B를 먼저 누르면되는 다음 B. 경우, 올바른 순서로 버튼을 누릅니다, 경고 메시지가있다. 앞의 질문에서 얻은 대답은 부울을 만들고이를 false로 설정하는 것이 었습니다. 버튼을 클릭하면 아래의 경고 메시지가 나타나고 funcAPressed가 true가 된 것처럼 보입니다. 경고 (y)가 "true"로 경고했기 때문입니다.

문제는 버튼 A를 클릭 한 후에 버튼 B를 클릭해도 사실이 아닌 funcAPressed = false가 계속 표시된다는 것입니다.

funcB는 y = true 대신 funcAPressed = true ...를 사용하면 정상적으로 작동하지만,이 기능을 사용하면 한 번만 사용할 수있는 대신 내 문서에서이 기능을 여러 번 복사해야합니다. 매개 변수를 지정하십시오.

+0

당신은 funcAPressed 참조에 의해 전달 된 생각, 당신은 y는 true로 설정하면, 당신은 funcAPressed 사실 오른쪽으로 설정된 것으로 가정? 이 답변을 읽으십시오 : http://stackoverflow.com/a/13104500/916000 –

답변

0

funA 안에 funcAPressed != y을 잘 이해하십시오. 변수가 아닌 변수 값만 전달합니다. 직접 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

당신이 말하는 것을 얻지 만, funcA 내에서 funcAPressed = true를 수행하지 않는 이유는이 종류를 실행할 것이기 때문입니다 기능을 여러 번 페이지에서 funcAPressed가 한 인스턴스에서만 true로 선언되면 그 이후의 모든 인스턴스에서 true가됩니다. 이런 종류의 수표가 두 번 이상 필요합니다. – 00Saad

0

이 시도를 사용하여 변수 값을 대체 .SO y하지 funcAPressed와 varible의 값을 대체합니다.

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>