我无法访问此代码中的ok变量。 如何为全局访问设置此变量
$('#Btn1').click(function(){
var ok=true;
});
$('#Btn2').click(function(){
if ( ok ) alert('ok');
})
答案 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");
}
})
答案 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 强>