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(),您使用此处所示的方法设置它setTimeoutfalse值设置为一个全局变量,该变量pressed不是您在函数中测试的那个

于 2013-07-27T03:10:10.063 回答