我有以下函数,在其他参数中,它接收一个名为pack_choice的参数(这是一个数字)。根据数量,我想为var分配一个文本,然后在画布上打印这个var。
这是完整的功能:
function create_voucher(visitor_name, unique_number, pack_choice)
{
var canvas = $("#canvas_voucher")[0];
var str_pack_name;
alert(pack_choice);
switch (pack_choice)
{
case 1:
str_pack_name = 'text 1';
alert(str_pack_name);
break;
case 2:
str_pack_name = 'text 2';
alert(str_pack_name);
break;
case 3:
str_pack_name = 'text 3';
alert(str_pack_name);
break;
}
alert(str_pack_name);
if (canvas.getContext)
{
var ctx = canvas.getContext('2d');
// Draw shapes
var img = new Image();
img.src = 'images/voucher.jpg';
img.onload = function(){
ctx.drawImage(img,0,0);
ctx.fillStyle="#000000";
ctx.font="bold 25px monospace";
ctx.fillText(str_pack_name, 600, 120);
...draw name...
...draw number...
draw_voucher_img();
...jQuery functions...
}
} else {
alert('Please update your browser');
}
}
alert(pack_choice);
确实给了我传递的号码。但是alert(str_pack_name);
在警报中提供了undefined
消息,并将其绘制在画布上。
为什么会发生这种情况?如何解决?
答案 0 :(得分:3)
只需更改switch case statements
即可识别字符串而非数字:
switch (pack_choice) {
case '1':
case '2':
case '3':
}
那应该解决它。
答案 1 :(得分:2)
正如Andy所说,pack_choice可能是一个字符串,并且switch语句不匹配,因为它使用严格比较(类型也必须匹配)。您可以在切换之前添加此项以强制变量为数字:
pack_choice = +pack_choice;
另一种解决方案是更改您的案例陈述以与字符串进行比较,例如case "1"
等。
答案 2 :(得分:2)
试试这个
switch(parseInt(pack_choice))
答案 3 :(得分:1)
尝试添加pack_choice = pack_choice * 1;
以在函数开头将其强制转换为整数。
switch
uses strict equality。没有验证自己。