JavaScript变量作用域

JavaScript变量作用域,javascript,scope,Javascript,Scope,我发现了很多关于这个话题的其他问题,但由于某种原因,它们并没有解决我的“问题” 我有一个纯粹出于兴趣而写的小剧本,它工作得很好,但有什么事困扰着我。脚本会在Focus上清除文本字段,如果在Blur上未输入任何内容,则键入“Write here”。脚本如下: <html> <head> <title>JavaScript</title> <!--Scripts--> <script type="text/ja

我发现了很多关于这个话题的其他问题,但由于某种原因,它们并没有解决我的“问题”

我有一个纯粹出于兴趣而写的小剧本,它工作得很好,但有什么事困扰着我。脚本会在Focus上清除文本字段,如果在Blur上未输入任何内容,则键入“Write here”。脚本如下:

<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>
如果调用该函数,则输出为2。但是当我在函数外部声明和初始化变量时,变量在函数内部不起作用-为什么??我是不是误解了什么

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

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

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

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

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

如果您将这一行

var _value = document.getElementById('input').value;

。。。在功能之外,它将在功能范围内。我认为您遇到的问题是,将它放在那里会导致它在DOM准备就绪之前执行,因此您的“input”元素还不存在。请尝试等待dom加载事件,或者将该脚本放在页面的最底部(就在
标记内)。

如果您将这一行放在

var _value = document.getElementById('input').value;

。。。在功能之外,它将在功能范围内。我认为您遇到的问题是,将它放在那里会导致它在DOM准备就绪之前执行,因此您的“input”元素还不存在。请尝试等待dom加载事件,或者将该脚本放在页面的最底部(就在
标记内)。

要回答第一个问题,初始化_值的问题可能是时间问题。通过将_值置于函数外部,该行javascript将立即执行。由于javascript位于head部分,它将在输入元素加载到文档之前执行。加载输入元素后,可以将这一行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>

var_value=document.getElementById('input').value;

现在,javascript变量“\u value”将被正确设置,并可“全局”用于所有javascript函数。

要回答第一个问题,初始化\u value的问题可能是时间问题。通过将_值置于函数外部,该行javascript将立即执行。由于javascript位于head部分,它将在输入元素加载到文档之前执行。加载输入元素后,可以将这一行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>

var_value=document.getElementById('input').value;

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

使用这些函数时要小心,一个是将其设置为“Write here”,当它为空时,另一个是将其更改为空,当它说“Write here”。它可能会在这两者之间切换很多,使得键入任何内容都很困难!只要我把它们分别称为对焦和模糊,它们是对立的,它不应该工作得很好吗?:)它在本地执行,但如果事件混淆,则可能会造成大量麻烦,你是对的:)小心使用这些函数,一个是将其设置为空时“在此处写入”,另一个是在显示“在此处写入”时将其更改为空。它可能会在这两者之间切换很多,使得键入任何内容都很困难!只要我把它们分别称为对焦和模糊,它们是对立的,它不应该工作得很好吗?:)它在本地执行,但如果事件混淆,可能会造成很多麻烦,你是对的:)为了让这些脚本正常工作,我非常确定他需要刷新事件处理程序每次调用的值。同意-我认为也存在一些逻辑级别的问题。我只是想在那个特别的评论中解决范围问题。为了让那些脚本正常工作,我非常确定他需要刷新事件处理程序每次调用的值。同意-我认为也存在一些逻辑级别的问题。我只是想在那个特别的评论中解决范围问题。没什么大不了的,但我基本上说了完全一样的话。。。但首先:pNo biggie,但我基本上说了完全一样的话。。。但首先是p