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

Andy が言ったように、pack_choice はおそらく文字列であり、厳密な比較を使用するため、switch ステートメントは一致しません (型も一致する必要があります)。これをスイッチの前に追加して、変数を強制的に数値にすることができます。

pack_choice = +pack_choice;

もう 1 つの解決策は、case ステートメントを などの文字列と比較するように変更することですcase "1"

于 2013-09-10T16:36:19.460 に答える
1

pack_choice = pack_choice * 1;関数の先頭に整数としてキャストするように追加してみてください。

switch別のSO回答に従って厳密な平等を使用します。本人確認はしていません。

于 2013-09-10T16:36:56.473 に答える