我无法在此代码中访问 ok 变量。如何设置此变量以进行全局访问
$('#Btn1').click(function(){
var ok=true;
});
$('#Btn2').click(function(){
if ( ok ) alert('ok');
})
我无法在此代码中访问 ok 变量。如何设置此变量以进行全局访问
$('#Btn1').click(function(){
var ok=true;
});
$('#Btn2').click(function(){
if ( ok ) alert('ok');
})
删除var
并在外部范围内声明变量:
var ok = false;
$('#Btn1').click(function() {
ok = true;
});
$('#Btn2').click(function() {
if(ok) alert('ok');
});
虽然删除var
足以使变量成为全局变量,但最好将其保持在尽可能小的范围内——在这种情况下,这就是包含这两个函数的范围。由于您可能将该代码包装在文档就绪回调函数中,因此它将是该函数的范围而不是全局范围。
尝试这个:
// 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;
});
});
虽然使用全局变量可以正常工作,但如果您的目标只是知道是否单击了第一个按钮,更好(和更多 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");
}
})
只需在处理程序之外声明 ok 变量
var ok=false;
$('#Btn1').click(function(){
ok =true;
});
$('#Btn2').click(function(){
if ( ok ) alert('ok');
})
要在 JavaScript 中创建全局函数,请省略 var:
ok = true;
然而,更好的风格是在两个函数的范围内声明变量,但在它自己的命名空间中,以避免命名空间污染:
function () {
var ok = false;
$('#Btn1').click(function(){
ok=true;
});
$('#Btn2').click(function(){
if ( ok ) alert('ok');
});
}
(编辑:格式化)