Javascript函数不能执行两次

Javascript function cannot be executed twice

本文关键字:两次 函数 不能 执行 Javascript      更新时间:2023-09-26

我是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变量