1

我有以下函数,除其他参数外,它还接收一个名为 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消息并将其绘制在画布上。

为什么会发生,我该如何解决?

4

4 回答 4

3

只需更改您switch case statements以识别字符串而不是数字:

switch (pack_choice) {
  case '1':
  case '2':
  case '3':
}

那应该解决它。

于 2013-09-10T16:40:48.493 回答
2

正如安迪所说,pack_choice 可能是一个字符串,switch 语句不匹配,因为它使用严格比较(类型也必须匹配)。您可以在切换之前添加它以强制您的变量为数字:

pack_choice = +pack_choice;

另一种解决方案是更改您的 case 语句以与字符串进行比较,例如case "1"等。

于 2013-09-10T16:36:19.460 回答
2

尝试这个

switch(parseInt(pack_choice))
于 2013-09-10T16:41:45.680 回答
1

尝试pack_choice = pack_choice * 1;在函数的开头添加以将其转换为整数。

switch根据另一个 SO 答案使用严格相等。还没有验证自己。

于 2013-09-10T16:36:56.473 回答