2014-10-27 119 views
3
$(document).ready(function() { 

    var x = ""; 

    $("#anyElement").click(function() { 
     x = "test"; 
     alert(x); 
    }); 

    alert(x); 
}); 

当第一次警报的作品,消息框,显示“测试”。当第二次提醒工作时,messagebox显示“”。如何在点击事件中设置全局变量?

$("#anyElement").click(function() { 
    // How can i set the x veriable as "test" here 
}); 
+2

全局是坏 – morissette 2014-10-27 19:54:51

+2

代码看起来很好......你肯定第一个警报没有'“”'? – tymeJV 2014-10-27 19:55:11

+0

这是由于变量的范围。 – 2014-10-27 19:55:53

回答

0

您所遇到的问题是因为节目的流程。您对变量x的声明使x全局并限定为document.ready函数。

“测试”没有分配到x变量,直到点击事件后第一个警报居然是写在代码的第二警报,因为没有与警报关联的事件。

+0

只是挑剔的...如果x的范围有限,那么它不是全球性的。如果你在document.ready之外尝试'alert(x)',你会得到未定义的。 – 2014-10-27 20:04:30

+0

同意大声笑 - 很nitpicky – morissette 2014-10-27 20:06:43

0

您的代码工作正常,第一次警报是空的,因为点击触发条件没有被调用:

FIDDLE

$(document).ready(function() { 

    var x = ""; 

    $("#anyElement").click(function() { 
     x = "test"; 
     alert(x); 
    }); 

    alert(x); 
}); 
0

我不知道如果我理解你有什么要求,但是,嘿,让我们避免全局,好吗?

这就是说,我会建议你去尝试这样的做法:

var app = {}; 
app.x = 'initial value'; 

app.bindEvents = function() { 
    $('#anyElement').click(function() { 
     app.x = 'test'; 
     console.log(app.x); 
    });  
}; 
app.bindEvents = function() { 
    app.bind(); 
}; 
$(app.init); 

在这里,我们的代码只设置一个全局对象(app),避免污染命名空间。 你的代码中的问题是你试图设置一个“全局”,但x不是一个全局的,而只是一个局部变量。

见工作JSFiddle here

+0

谢谢你的回答,:) – Ahmet 2014-10-27 20:19:02