2

タイトルにあるように、IE8 と Javascript に問題があります。グローバル変数の解釈におけるバグについて知られています。次のように宣言しないと、単純にそれらを取得できません。

var variable1 = something;

問題は、ボタンをクリックしてボディの背景を変更するスクリプトを作成しようとしていて、実際のステータスをラップするグローバル変数が必要です(bg-x.pngをロードしているもの)。このスクリプトは FF、Safari、および Chrome で動作しますが、明らかに IE では動作しません。ヘルプ?(問題は変数「ステータス」にあります)

$('#change').click(function() {
    var numStates = 2;
    var name = $(this).text();

    if(!(status)) {
        status = parseInt(1,10);
    }

    if(status<numStates) {
        status = parseInt(status,10) + 1;
    }
    else {
     status = parseInt(1,10);
    }


    alert(status);


    var bgvar = null;

    switch(parseInt(status,10)) {
        case 1: var bgvar = ' #7097ab url(./img/bg-' + status + '.png) top center repeat';
        var name = 'Pattern';
        break;
        case 2: var bgvar = ' #7097ab url(./img/bg-' + status + '.png) top center repeat-x';
        var name = 'Sfumato';
        break;
        default: alert('Default');
    }

    $('body').css({
        background:bgvar,
    });

    $(this).text(name);


}
);

IE でも動作するコード (Zeta に感謝):

$('#change').click(function() {
   var numStates = 2;
   var name = $(this).text();

// If data-status isn't defined set it to the initial value
if($('body').data('status') === undefined)
    $('body').data('status',1);

// Extract the status
var status = parseInt($('body').data('status'),10);

// Handle the status
if(status < numStates)
    status++;
else
    status = 1;

// Save the status
$('body').data('status',status);




    switch(status) {
        case 1: bgvar = ' #7097ab url(./img/bg-' + status + '.png) top center repeat';
        name = 'Pattern';
        break;
        case 2: bgvar = ' #7097ab url(./img/bg-' + status + '.png) top center repeat-x';
        name = 'Sfumato';
        break;
        default: alert('Default');
    }

    $('body').css({
        background:bgvar,
    });

    $(this).text(name);


}
);
4

3 に答える 3

3

status は window-object の定義済みメンバーであり、ステータスバーの内容を指します。別の変数名を使用する

于 2012-04-21T10:30:43.597 に答える
2

.data()すでに jQuery を使用しているため、グローバル変数の代わりに使用できます。

$('#change').click(function() {
    var numStates = 2;
    var name = $(this).text();

    // If data-status isn't defined set it to the initial value
    if($('body').data('status') === undefined)
        $('body').data('status',1);

    // Extract the status
    var status = parseInt($('body').data('status'),10);

    // Handle the status
    if(status < numStates)
        status++;
    else
        status = 1;

    // Save the status
    $('body').data('status',status);

    /* ... Rest of your code ... */

これは IE の XML ドキュメントでは機能しないことに注意してください (jQuery ドキュメントによると)。

于 2012-04-21T10:27:14.207 に答える
1

»var« をいつ使うべきか知っていますか? 次の方法でコードをクリーンアップしました。

  1. 「var status;」を追加 ローカル変数にする
  2. switch ステートメントで既に定義されている変数の「var」を削除します
  3. 「background: bgvar」の後ろにある不要なコンマを削除すると、IE でエラーが発生します。

    $('#change').click(function () {
            var numStates = 2;
            var name = $(this).text();
            var status;
    
            if (!(status)) {
                    status = parseInt(1, 10);
            }
    
            if (status < numStates) {
                    status = parseInt(status, 10) + 1;
            } else {
                    status = parseInt(1, 10);
            }
    
    
            alert(status);
    
    
            var bgvar = null;
    
            switch (parseInt(status, 10)) {
            case 1:
                    bgvar = ' #7097ab url(./img/bg-' + status + '.png) top center repeat';
                    name = 'Pattern';
                    break;
            case 2:
                    bgvar = ' #7097ab url(./img/bg-' + status + '.png) top center repeat-x';
                    name = 'Sfumato';
                    break;
            default:
                    alert('Default');
            }
    
            $('body').css({
                    background: bgvar
            });
    
            $(this).text(name);
    
    
    });
    

今はうまくいきますか?

PS http://www.jshint.com/を使用して、この種のエラーを防止してください。

于 2012-04-21T10:35:06.407 に答える