我是Javascript的新手,我想知道几个小时如何解决我的问题。我有一个与按钮相关的litle功能。它工作一次,但我不能让它在第一次执行后执行。
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"是一个以浏览器为中心的简单textarea。代码最初比这更复杂,但在进行测试以确保问题不是来自其他地方时,它减少到了但仍然无法工作。
第二个" lol =" test2&#34 ;;"只是要检查一下,如果我对变量进行了更改,那么第二次按下按钮就可以应用它。
它似乎对我来说是基本的,但我无法弄清楚为什么......任何帮助?
感谢。
编辑:
我想我在原始脚本中找到了错误的来源。我的原始代码如下所示:
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);
行为:我点击按钮。警报正在填充,就像它被照顾一样。我第二次点击按钮,它什么都不做。
的问候,
答案 0 :(得分:1)
更新了答案:
您的编辑会显着改变。核心问题在于:
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&#34 ;;"只是要检查一下,如果我对变量进行了更改,那么第二次按下按钮就可以应用它。
它赢了,因为你以前的
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
属性设置为{{1 }}
"block"
将值// 2
lol = "lol";
分配给"lol"
变量。除非您在某个地方宣布lol
,否则它还会创建一个隐式全局变量。详情:The Horror of Implicit Globals。
lol
将// 3
document.getElementById('TemplateOutput').value = lol;
变量中的值"lol"
复制到输入的lol
属性中。
value
将值// 4
lol = "test2";
复制到"test2"
变量中。