我试图在点击
时将变量从false更改为truevar $popupStatus = false;
$('li a').click(function() {
console.log('The list item has been clicked'); // This console log is successful
$popupStatus = true;
});
if($popupStatus) {
console.log('The popup variable is true;'); // This console log doesn't show up
}
我知道这必须与范围有关但我无法看到我出错的地方,感谢您的帮助。
答案 0 :(得分:0)
问题是$popupStatus
仅在执行点击处理程序时更改为false
,因为解析js时尚未触发。
遇到if()
时,$popupStatus
仍为false
,因此if
无法成功。
尝试触发事件:
$('li a').click(function() {
console.log('The list item has been clicked'); // This console log is successful
$popupStatus = true;
}).trigger('click');
或者根据您尝试执行的操作将if
条件放入处理程序中。
答案 1 :(得分:0)
您对变量的范围是正确的,但要检查点击状态,if()
条件应该在处理程序或函数中;这将在点击时被调用。
如果您只是将if()
添加到$(document).ready
,$popupStauts
将始终保持为假。
要验证布尔更改,您应该在点击时或点击处理程序工作后检查if()
。
试试这个。
var $popupStatus = false;
$('li a').click(function(event) {
event.preventDefault();
console.log('The list item has been clicked'); // This console log is successful
$popupStatus = true;
checkStatus();
});
function checkStatus(){
if($popupStatus) {
console.log('The popup variable is true;'); // This console log doesn't show up
}
}
<强> Demo 强>
答案 2 :(得分:0)
问题是您只评估$popupStatus
变量一次 - 文档加载完毕后。您可能希望将其移动到click
处理程序或具有调用函数以检查最新值的函数(请参阅@ shaunakde&#39; s解决方案)。
<强> jQuery的:强>
var $popupStatus = false;
$('li').on('click', 'a', function() {
$popupStatus = !($popupStatus); // This assigns $popupStatus an opposite value
// $popupStatus = true; // Just sets $popupStatus to true
alert($popupStatus);
});
<强> HTML:强>
<ul>
<li><a href="#">Something</a></li>
</ul>
<强> DEMO 强>