我发现了一些关于这个话题的其他问题,但出于某种原因,他们没有解决我的“问题”。
我有一个纯粹感兴趣的小剧本--它工作得很好,但有些东西在困扰着我。该脚本清除文本字段onFocus,如果没有输入onBlur,则键入“写在这里”。该脚本如下:
<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中声明它:
var i = 1;
function foo(){
i++;
return;
}如果调用该函数,输出将为2。但是当我在函数之外声明和初始化变量时,变量不能从函数内部工作--为什么??我在这里有误解吗?)
我还有另一个问题:
正如您所看到的,当您离开页面时,我添加了一个确认框(我知道这很烦人,我不打算使用它,这只是一个实验),但是如果客户端按下“取消”,我不知道如何不离开页面。我怎样做?:)
编辑我的第一部分问题现在已经解决了-谢谢!
但是关于烦人的确认框还有最后一部分,可以说,你们中有谁知道如何阻止客户离开吗?
发布于 2010-08-09 15:56:16
要回答第一个问题,初始化_value可能是时间问题之一。通过将_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>现在,javascript变量"_value“将被正确地设置,并对您的所有javascript函数”全局“可用。
发布于 2010-08-09 15:52:44
好的,您可以在函数之外声明它,但是您需要更新每个函数调用(即每个事件)的值。如果没有,那么您的事件处理程序如何知道它是什么?
发布于 2010-08-09 15:53:22
如果你把这条线..。
var _value = document.getElementById('input').value;..。在功能之外,它将在功能范围内。不过,我认为您遇到的问题是,将它放在那里会导致在DOM准备好之前执行它,因此您的“输入”元素还不存在。尝试要么等待dom load事件,要么将脚本放在页面的最底部(就在</body>标记中)。
https://stackoverflow.com/questions/3441736
复制相似问题