Javascript函数不能执行两次
Javascript function cannot be executed twice
我是Javascript的新手,我想知道几个小时如何解决我的问题。我有一个与按钮相关的小函数。它工作一次,但我不能让它执行后,第一次。
function CheckEmpty1(){return "false";}
function Generate(){
if(CheckEmpty1() == "true"){
alert("Please fill all mandatory field.'n'nAll missing field are black colored.'n'nPlease also make sure to make a choice for all radio button.");
}
else{
document.getElementById('TemplateOutput').style.display = "block";
lol = "lol";
document.getElementById('TemplateOutput').value = lol;
lol = "test2";
}
return;
}
"TemplateOutput"是一个位于浏览器中心的简单文本区。代码原本比这更复杂,但在进行测试以确保问题不是来自其他地方时,它减少到这一点,但仍然不起作用。
第二个"lol = "test2";"只是为了检查如果我对变量进行更改,它应该在我第二次点击按钮时应用。
这对我来说似乎很基本,但我不明白为什么…任何帮助吗?
谢谢。编辑:
我想我在原来的脚本中找到了错误的根源。我的原始代码是这样的:
function Output(){
Output = "CSD Troubleshooting: " + Troubleshoot + "'n";
return Output;
}
function Generate(){
FillVars();
GenerateOutput = Output();
alert(GenerateOutput);
}
function FillVars(){
Troubleshoot = document.getElementById('Troubleshoot').value;
}
我把它减小到最小值,但它的行为还是一样的
问题来自Output()函数,因为如果我这样做,它会工作得很好:
GenerateOutput = document.getElementById('Troubleshoot').value;
alert(GenerateOutput);
或
GenerateOutput = Troubleshoot;
alert(GenerateOutput);
行为:我点击按钮。警报像它应该的那样被填满了。当我第二次点击按钮时,它什么也没做。
认为,
更新答案:
你的编辑明显改变了事情。核心问题在这里:
function Output(){
Output = "CSD Troubleshooting: " + Troubleshoot + "'n";
return Output;
}
第一次运行该函数时,用字符串替换函数。Output
符号是对函数的引用。
看起来你可能有一个Visual Basic背景。在JavaScript中,您只需这样做:
function Output(){
return "CSD Troubleshooting: " + Troubleshoot + "'n";
}
或者如果您希望它首先在变量中,请声明该变量(使用var
),并且可能为了避免混淆而使用不同的名称:
function Output(){
var result = "CSD Troubleshooting: " + Troubleshoot + "'n";
return result;
}
原始回答:
第二个"lol = "test2";"只是为了检查如果我对变量进行更改,它应该在我第二次点击按钮时应用。
不会,因为你之前的
lol = "lol";
…线路运行,设置回"lol"
。您永远不会看到代码将"test2"
放入输入。
document.getElementById('TemplateOutput').value = lol;
将从lol
复制到value
属性。它不会使value属性成为对变量lol
的引用。之后更改变量没有效果,因为它与value
属性之间没有持续的链接。
由于代码中的if
块永远不会运行,让我们只看else
块。下面是发生的详细情况:
// 1
document.getElementById('TemplateOutput').style.display = "block";
在DOM中查找具有id
"TemplateOutput"的元素,并将其style
对象的display
属性设置为"block"
。
// 2
lol = "lol";
将值"lol"
赋值给lol
变量。除非您在某个地方声明了lol
,否则它还会创建一个隐式全局变量。详细信息:隐式全局变量的恐怖.
// 3
document.getElementById('TemplateOutput').value = lol;
将从lol
变量中复制值"lol"
到输入的value
属性中。
// 4
lol = "test2";
将值"test2"
复制到lol
变量
- Meteor Router数据函数被调用两次
- Append元素在运行两次函数后不显示
- 为什么我们要在语句中两次将函数括在括号中
- 调用一个函数两次
- java-script 函数被调用两次
- Ajax Post-Submit函数提交两次
- 在一个页面中包含两次的脚本中调用函数
- 我必须点击两次才能使用jQuery激活函数
- 为什么这个函数执行了两次
- isHidden函数要求我在应用响应显示时单击两次
- 调用随机函数Javascript,但不能两次调用相同的函数
- jQuery停止函数运行两次
- JS函数只需点击一次即可触发两次
- 在一个页面中使用相同的javascript函数两次
- matchMedia调用函数两次
- JS函数中的一个点击按钮被调用了两次
- jQuery移除两次函数调用
- 在JS中定义两次函数.根据网页指示要使用的定义
- 防止在两个触发事件中执行两次函数
- AngularJS需要执行两次函数才能显示结果