Javascript 为什么不是';我的变量没有变化吗?
我试图使用下面的switch语句来更改全局变量,但它只会更改一次 HTMLJavascript 为什么不是';我的变量没有变化吗?,javascript,jquery,Javascript,Jquery,我试图使用下面的switch语句来更改全局变量,但它只会更改一次 HTML <button type="button" value =15>16x16</button> <button type="button" value =31>32x32</button> <button type="button" value =63>64x64</button> 16x16 32x32 64x64 JavaScript var
<button type="button" value =15>16x16</button>
<button type="button" value =31>32x32</button>
<button type="button" value =63>64x64</button>
16x16
32x32
64x64
JavaScript
var initial_size = 15;
var $cl;
var $size;
$(document).ready(function(){
populate(initial_size);
});
function populate(size){
$('.main-table').empty();
$size = size;
switch($size){
case 15:
$cl = 'box';
break;
case 31:
$cl = 'bigger-box';
console.log("case 31");
break;
case 63:
$cl = 'biggest-box';
console.log("case 63");
break;
default:
break;
}
console.log($cl);
for(var i=0; i < $size; i++){
$tr = $("<tr></tr>");
for(var j=0; j < $size; j++){
$div = $("<div class=" +$cl+"></div>");
$div.css('background-color', 'lightslategrey');
$tr.append($("<td></td>").append($div));
}
$(".main-table").append($tr);
}
run();
};
function run(){
$('.box').hover(function(){
$(this).css('background-color', 'black');
});
$('button').click(function(){
console.log($(this).val());
populate($(this).val());
});
};
var初始大小=15;
var$cl;
var$大小;
$(文档).ready(函数(){
填充(初始大小);
});
函数填充(大小){
$('.main table').empty();
$size=size;
交换机($大小){
案例15:
$cl=‘盒子’;
打破
案例31:
$cl=‘大盒子’;
控制台日志(“案例31”);
打破
案例63:
$cl=‘最大的盒子’;
控制台日志(“案例63”);
打破
违约:
打破
}
控制台日志($cl);
对于(变量i=0;i<$size;i++){
$tr=$(“”);
对于(变量j=0;j<$size;j++){
$div=$(“”);
$div.css('background-color','lightslategrey');
$tr.append($(“”).append($div));
}
$(“.main table”).append($tr);
}
run();
};
函数运行(){
$('.box').hover(函数(){
$(this.css('background-color','black');
});
$(“按钮”)。单击(函数(){
log($(this.val());
填充($(this.val());
});
};
因此,当我运行代码时,$cl将设置为“box”,但每当我单击另一个按钮,循环再次运行时,$cl不会更改为任何其他类。我是否使用了switch语句错误,或者我没有正确解析值,或者问题是因为我使用了全局变量?我使用全局变量的唯一原因是因为我还不太熟悉javascript中的作用域,所以我认为这种方法可能更容易
我使用的switch语句是错误的,还是没有正确解析值
就是这个。按钮的值是字符串,但您的switch
语句是对数字进行操作的<代码>大小写语句使用包含类型的严格相等。因此,要么将值解析为数字,要么在案例中使用字符串文字。当前,您的代码将始终达到默认值
我使用全局变量的唯一原因是因为我还不太熟悉javascript中的作用域,所以我认为这种方法可能更容易
实际上相当简单:所有函数声明、参数声明和var
声明的作用域都是包含它们的函数。你真的应该在这里使用局部变量
顺便说一句,你真的应该移动
run()代码>调用从populate
进入文档就绪回调,位于populate(初始大小)旁边代码>。当前,每次单击按钮时,您都会附加一组新的事件侦听器,所有这些侦听器都会在每次单击时启动。您发布的代码不完整,但从您发布的内容来看,您并没有实际运行run()
函数来设置事件处理程序。另外,您还没有用右括号关闭run()函数
}`尝试在jsfiddle.net上创建一个fiddle并链接到问题中的fiddle。您也没有关闭填充函数。最后一个右括号与switch语句语法错误有关!!:哦,对不起。run函数在我的实际文件中是关闭的,在我发布它时括号丢失了