0

我无法在此代码中访问 ok 变量。如何设置此变量以进行全局访问

$('#Btn1').click(function(){
var ok=true;
});
$('#Btn2').click(function(){
 if ( ok ) alert('ok');
})
4

5 回答 5

2

删除var并在外部范围内声明变量:

var ok = false;
$('#Btn1').click(function() {
    ok = true;
});
$('#Btn2').click(function() {
    if(ok) alert('ok');
});

虽然删除var足以使变量成为全局变量,但最好将其保持在尽可能小的范围内——在这种情况下,这就是包含这两个函数的范围。由于您可能将该代码包装在文档就绪回调函数中,因此它将是该函数的范围而不是全局范围。

于 2012-11-22T10:40:46.260 回答
0

尝试这个:

// this is a global variable
var isValidGlobal = false;

$(function() {
    // since this is global, i can alert it here
    alert(isValidGlobal);

    $('#Btn1').click(function() {
        // Set the global variable
        isValidGlobal = true;
        return false;
    });

    $('#Btn2').click(function() {

        if (isValidGlobal) alert('global variable');
        return false;
    });
});​

演示

于 2012-11-22T14:32:19.123 回答
0

虽然使用全局变量可以正常工作,但如果您的目标只是知道是否单击了第一个按钮,更好(和更多 jQuery-ish)方法是使用 jQuery 将该数据存储为按钮本身的一部分.data()方法。

为了使其更加灵活,您甚至可以保存单击按钮的次数,然后在单击另一个按钮时检查该值:

$('#Btn1').click(function(){
    $(this).data("click_count", (parseInt($(this).data("click_count")) || 0) + 1);
});

$('#Btn2').click(function(){
    var clickCount = (parseInt($('#Btn1').data("click_count")) || 0);
    if (clickCount > 0) {
        alert("clicked at least once");
    }
})​

现场测试用例

于 2012-11-22T10:49:26.200 回答
0

只需在处理程序之外声明 ok 变量

var ok=false;
$('#Btn1').click(function(){
  ok =true;
});
$('#Btn2').click(function(){
 if ( ok ) alert('ok');
})
于 2012-11-22T10:41:14.320 回答
0

要在 JavaScript 中创建全局函数,请省略 var:

ok = true;

然而,更好的风格是在两个函数的范围内声明变量,但在它自己的命名空间中,以避免命名空间污染:

function () {
    var ok = false;
    $('#Btn1').click(function(){
        ok=true;
    });
    $('#Btn2').click(function(){
        if ( ok ) alert('ok');
    });
}

(编辑:格式化)

于 2012-11-22T10:41:53.563 回答