如何在JavaScript中定义可在所有函数中访问的全局变量
这是一个示例表单:如何在JavaScript中定义可在所有函数中访问的全局变量,javascript,global-variables,Javascript,Global Variables,这是一个示例表单: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Sample form</title> <script type="text/javascript"> function displayResult() { a
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Sample form</title>
<script type="text/javascript">
function displayResult() {
alert(document.myForm.myInput.value);
}
function getFocus() {
if (document.myForm.myInput.value == document.myForm.myInput.defaultValue) {
document.myForm.myInput.value = "";
}
}
function loseFocus() {
if (document.myForm.myInput.value == "") {
document.myForm.myInput.value = document.myForm.myInput.defaultValue;
}
}
</script>
</head>
<body>
<form name="myForm" method="get" onsubmit="return false;" action="">
<input name="myInput" value="Hello world!" onfocus="getFocus();" onblur="loseFocus();"><br>
<input type="button" onclick="displayResult();" value="Display input value">
</form>
</body>
</html>
样本表格
函数displayResult(){
警报(document.myForm.myInput.value);
}
函数getFocus(){
if(document.myForm.myInput.value==document.myForm.myInput.defaultValue){
document.myForm.myInput.value=“”;
}
}
函数focus(){
如果(document.myForm.myInput.value==“”){
document.myForm.myInput.value=document.myForm.myInput.defaultValue;
}
}
它可以正常工作,但以下情况不起作用,尽管变量x似乎是正确的:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Sample form</title>
<script type="text/javascript">
var x = document.myForm.myInput;
function displayResult() {
alert(x.value);
}
function getFocus() {
if (x.value == x.defaultValue) {
x.value = "";
}
}
function loseFocus() {
if (x.value == "") {
x.value = x.defaultValue;
}
}
</script>
</head>
<body>
<form name="myForm" method="get" onsubmit="return false;" action="">
<input name="myInput" value="Hello world!" onfocus="getFocus();" onblur="loseFocus();"><br>
<input type="button" onclick="displayResult();" value="Display input value">
</form>
</body>
</html>
样本表格
var x=document.myForm.myInput;
函数displayResult(){
警报(x值);
}
函数getFocus(){
如果(x.value==x.defaultValue){
x、 value=“”;
}
}
函数focus(){
如果(x.value==“”){
x、 value=x.defaultValue;
}
}
它有什么问题?我如何定义一个全局变量供所有函数使用?在DOM准备就绪之前,您的变量x被分配了
document.myForm.myInput
值。
您可以在声明表单和myInput元素后放置脚本,将脚本设置为在onload事件中运行,或者使用jQuery的on document ready支持(提供类似支持的其他js库也可用)
备选案文1:
<body>
<form name="myForm">
<input name="myInput"> ...
</form>
<script>
...
</script>
</body>
备选案文3:
(function($) {
$(function() {
var x = document.myForm.myInput;
...
});
}(window.jQuery));
要使变量在所有作用域中可见,应在最全局的作用域中声明它:
<script>
var variableName;
</script>
您的代码无法工作,因为在定义x时,表单不可用,这意味着您没有为变量赋值。您应该将初始化包装在onload事件的事件处理程序中:
window.onload = function(){
window.x = document.myForm.myInput;
};
或
JavaScript代码在加载文档其余部分之前运行。试着把它放在最后,或者考虑使用<代码> OnLoad 事件>代码>正文< /C> >,或者如果你想使用一个库,比如jQuery,你可以使用这个事件。 < P>如果你在加载或DOMCED事件中把整个<代码> 内容打包,它应该工作。或者,你可以把整个
-标签放在网站的底部(就在关闭
之前-标记定义不起作用。是否有错误?更具体地说,是在HTML解析器解析
元素之前。脚本需要放在
之后。)element@rich.okelly:谢谢你的回答和澄清!我只是想知道你如何比较第一个选项和第二个选项第三个选项是在dom准备就绪之前执行代码?它只是一个在解析时执行的自调用匿名函数。@RainLover个人。我更喜欢将脚本放在页面的末尾,我尝试遵循渐进增强原则,因此当用户等待脚本运行时,页面仍能正常运行load.@gion_13在解析自调用函数时,第三个选项向jQuery DOM ready事件注册一个处理程序,但是内部函数中的代码仅在该事件(DOM就绪后)的结果下执行。
window['variableName'] = value;
window.onload = function(){
window.x = document.myForm.myInput;
};
var x;
window.onload = function(){
x = document.myForm.myInput;
};