Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中定义可在所有函数中访问的全局变量_Javascript_Global Variables - Fatal编程技术网

如何在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;
};