首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript变量范围

JavaScript变量范围
EN

Stack Overflow用户
提问于 2010-08-09 15:47:31
回答 3查看 167关注 0票数 0

我发现了一些关于这个话题的其他问题,但出于某种原因,他们没有解决我的“问题”。

我有一个纯粹感兴趣的小剧本--它工作得很好,但有些东西在困扰着我。该脚本清除文本字段onFocus,如果没有输入onBlur,则键入“写在这里”。该脚本如下:

代码语言:javascript
复制
<html>
<head>
    <title>JavaScript</title>
    <!--Scripts-->
    <script type="text/javascript">
    <!--

    function noValue() {    
    var _value = document.getElementById('input').value;
    if (_value == "Write here") {
    document.getElementById('input').value='';
    }
    }

    function changeValue() {
    var _value = document.getElementById('input').value;
    if (_value == "") {
        document.getElementById('input').value='Write here';
    }
    }

    function dontLeave() {
        var c_box = confirm("Do you want to leave?");
        if (c_box == true) {
            die;
        }
        else {
            history.back;
        }
    }
    //-->
    </script>
    </head>

<body onUnload="dontLeave()">
<form>
<input id="input" type="text" value="Write here" onFocus="noValue()" onBlur="changeValue()">
</form>
</body>

</html>

如您所见,变量_value在"noValue()“和"changeValue()”中使用了两次。这就是我想要改变的。

我认为您可以从函数内部访问一个全局变量,方法是不在函数fx中声明它:

代码语言:javascript
复制
var i = 1;  
function foo(){  
i++;  
return;  
}

如果调用该函数,输出将为2。但是当我在函数之外声明和初始化变量时,变量不能从函数内部工作--为什么??我在这里有误解吗?)

我还有另一个问题:

正如您所看到的,当您离开页面时,我添加了一个确认框(我知道这很烦人,我不打算使用它,这只是一个实验),但是如果客户端按下“取消”,我不知道如何不离开页面。我怎样做?:)

编辑我的第一部分问题现在已经解决了-谢谢!

但是关于烦人的确认框还有最后一部分,可以说,你们中有谁知道如何阻止客户离开吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-09 15:56:16

要回答第一个问题,初始化_value可能是时间问题之一。通过将_value置于函数之外,将立即执行这一行javascript。因为javascript位于head部分,所以它将在输入元素加载到文档之前执行。在加载了输入元素之后,您可以将这一行javascript放在文档的末尾,如下所示:

代码语言:javascript
复制
<body onUnload="dontLeave()">
<form>
<input id="input" type="text" value="Write here" onFocus="noValue()" onBlur="changeValue()">
</form>
<script type="text/javascript">
    var _value = document.getElementById('input').value;
</script>
</body>

现在,javascript变量"_value“将被正确地设置,并对您的所有javascript函数”全局“可用。

票数 1
EN

Stack Overflow用户

发布于 2010-08-09 15:52:44

好的,您可以在函数之外声明它,但是您需要更新每个函数调用(即每个事件)的值。如果没有,那么您的事件处理程序如何知道它是什么?

票数 1
EN

Stack Overflow用户

发布于 2010-08-09 15:53:22

如果你把这条线..。

代码语言:javascript
复制
var _value = document.getElementById('input').value;

..。在功能之外,它将在功能范围内。不过,我认为您遇到的问题是,将它放在那里会导致在DOM准备好之前执行它,因此您的“输入”元素还不存在。尝试要么等待dom load事件,要么将脚本放在页面的最底部(就在</body>标记中)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3441736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档