jquery中的全局函数

时间:2012-11-22 10:39:09

标签: jquery

我无法访问此代码中的ok变量。 如何为全局访问设置此变量

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

5 个答案:

答案 0 :(得分:2)

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

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

虽然删除var足以使变量成为全局变量,但将它保持在本地最小可能范围内要好得多 - 在这种情况下,这是包含这两个函数的范围。由于您可能将该代码包装在 document ready 回调函数中,因此它将是该函数的范围而不是全局范围。

答案 1 :(得分:0)

在你的处理程序之外声明ok变量

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

答案 2 :(得分:0)

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

ok = true;

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

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

(编辑:格式化)

答案 3 :(得分: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");
    }
})​

Live test case

答案 4 :(得分: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;
    });
});​

<强> DEMO