Javascript函数无法执行两次

时间:2014-06-03 12:39:28

标签: javascript

我是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);

行为:我点击按钮。警报正在填充,就像它被照顾一样。我第二次点击按钮,它什么都不做。

的问候,

1 个答案:

答案 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;

复制 lolvalue属性的值。它不会使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"变量中。