0

1秒後に飛び出すボタンが欲しい。また、飛び出していない間は押すことができません。

$(document).ready(function(){
    var pressed1 = false;
    // Audio-Element 'audioElement' gets declared
    $('#button1').bind("contextmenu",function(e){
    if(!pressed1){
        audioElement.play();
        pressed1 = true;
        $('#button1').css({backgroundImage: "url(img/button_pressed.png)"});
        setTimeout('$("#button1").css({backgroundImage: "url(img/button.png)"}); pressed1 = false;', 1000);
        return false;
    }else{
        return false;
    }
    });
});

1 秒後にボタンが飛び出し、「pressed1」が「false」に設定されますが、もう一度ボタンを押すことはできません。JavaScriptコンソールで「pressed1」を「false」に設定しても!

4

2 に答える 2

4

@Mashが提案したように、代わりにこれを試してください:

$(document).ready(function(){
    var pressed1 = false;
    // Audio-Element 'audioElement' gets declared
    $('#button1').bind("contextmenu",function(e){
    if(!pressed1){
        audioElement.play();
        pressed1 = true;
        $('#button1').css({backgroundImage: "url(img/button_pressed.png)"});
        setTimeout(function() {
            $("#button1").css({backgroundImage: "url(img/button.png)"});
            pressed1 = false;
        }, 1000);
        return false;
    }else{
        return false;
    }
    });
});

setTimeout関数の代わりに評価されるコードの文字列を使用すると、コードは を使用して内部的に評価され、スコープeval()が異なります (クロージャー内の変数にアクセスできません)。

于 2013-07-27T03:09:46.803 に答える
1

これは、変数がここに示されているメソッドpressed1のロケールであるためです。ここに示されているように、値は、関数でテストしているグローバル変数ではなく、グローバル変数に設定されています。ready()setTimeoutfalsepressed

于 2013-07-27T03:10:10.063 に答える