两个不同脚本标记中的相同变量

时间:2014-03-12 13:57:42

标签: javascript

这是我的第一个标签

<script type="text/javascript"> 
$(document).ready(function () {

    // some code

    var showWarning = true;

    // more code

});
</script>

然后我有另一个脚本标记:

<script type="text/javascript">
    function submitFormLink(){
        document.getElementById('vacationApplicationForm').action = '<c:url value="/preview-pdf"/>';
        document.getElementById('vacationApplicationForm').method = 'POST';
        document.getElementById('vacationApplicationForm').submit();
    }
    function submitFormButton(){
        if (showWarning == true){
            alert("hi");
        }
        document.getElementById('vacationApplicationForm').action = '';
        document.getElementById('vacationApplicationForm').method = 'POST';
        document.getElementById('vacationApplicationForm').submit();
    }
 </script>

我得到一个错误,说showWarning是未定义的。我在同一窗口中读到变量全局变量。那么我做错了什么?

6 个答案:

答案 0 :(得分:5)

你没有宣布全球化。

您在函数中使用var关键字,所以:

  • 在函数运行之前不会定义
  • 它将是函数的本地

如果您想要全局,请在全局范围内创建变量:

<script type="text/javascript"> 
var showWarning = true;
$(document).ready(function () {
    // some code
    // more code
});
</script>

答案 1 :(得分:1)

您的变量showWarning不是全局的。范围是文档就绪处理程序。如果你想让它全球化,你就必须做这样的事情

<script type="text/javascript"> 

var showWarning = true; // now it has global scope

$(document).ready(function () {
    // some code
    // more code
});
</script>

在javascript中使用全局变量是一种不好的做法,所以你应该避免每次都这样做。有关此问题的详细信息,请在google上查看Pollution of the Global Namespace

答案 2 :(得分:0)

top变量只存在于$(document).ready中,你需要在函数之外声明它:

var showWarning;

$(document).ready(function () {

    // some code

     showWarning = true;

    // more code

});

答案 3 :(得分:0)

在裸<script>标签内,它将是全局的:

<script type="text/javascript"> 

var showWarning = true;

</script>

但是,您已经在函数内部,并且您使用var语句明确地将变量确定为该函数。

如果要在函数内部创建全局变量,请将其附加到window,这是浏览器中的全局上下文:

<script type="text/javascript"> 
$(document).ready(function () {

    // some code

    window.showWarning = true;

    // more code

});
</script>

答案 4 :(得分:0)

您没有将showWarning声明为全局,而是在函数内声明它。如果要将其设置为全局,则需要将定义更改为:

<script type="text/javascript"> 
var showWarning = true;
$(document).ready(function () {

    // some code

答案 5 :(得分:-1)

如果您在javascript上添加 var ,则表示本地变量。尝试删除showWarning变量上的var。

showWarning = true