Javascript布尔值不起作用?

时间:2013-07-27 03:06:08

标签: jquery

我想要一个按钮,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'也是如此!

2 个答案:

答案 0 :(得分: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()进行评估,而{{1}}具有不同的范围(不是有权访问你的闭包中的变量。)

答案 1 :(得分:1)

这是因为变量pressed1是此处显示的ready()方法的区域设置,您可以使用setTimeout进行设置,如此处所示false值已设置到名为pressed的全局变量,而不是您在函数中测试的变量