JS用用户输入替换表单输入

时间:2014-04-24 06:37:18

标签: javascript forms replace concatenation

我是javascript的新手,并且正在努力完成我的最后一个课程。我们基本上是在线测验。这是一个数学测验,我已经为答案设置了带有文本输入字段的表单,这些表单都在div容器中。我正在尝试创建一个函数,在单击提交按钮时,将拉取用户输入的值,并使用该值将表单替换为div的内部html。这样,答案将被提交,并且在用户提交答案后无法更改。其中一个关键步骤是单独输入答案的数字 - 十列的字段,一个字段。我试图将它们分开,连接它们,然后将它们与计算出的实际答案进行比较。实际答案将替换提交按钮,颜色编码以反映用户是否正确。这就是我所拥有的:

var firstNumber = Math.floor((Math.random()*50)+1);
var secondNumber = Math.floor((Math.random()*50)+1);
var generate = function(){
    document.getElementById("addends1").innerHTML=firstNumber;
    document.getElementById("addends2").innerHTML=secondNumber;
};
var evaluate = function(){
    var result = firstNumber+secondNumber;
    document.getElementById("button").innerHTML=result;
    var tens = document.getElementById("result10s").value;
    var ones = document.getElementById("result1s").value;
    var entry = tens + ones;
    document.getElementById("resultContainer").innerHTML=entry;
    var cO = document.getElementById("cO").value;
    document.getElementById("carryOverContainer").innerHTML=cO;
    var answer = parseFloat(entry);
    if (answer===result) {
        document.getElementbyID("resultContainer").style.color="#b2f078";
    } else {
        document.getElementbyID("resultContainer").style.color="#e87c73";
    }
};
document.getElementById("button").onclick=evaluate();

(第一个函数在html标记中调用,onload用于按钮图像) 谢谢! 编辑:我的问题只是我的代码根本没有做任何事情。我不知道这是否与我如何调用“评估”函数或函数本身有关。我想用输入的值替换所有表单字段,然后还用添加问题的正确答案替换该按钮。这是我的HTML:

<body>
<div id="carryOverContainer">
    <form>
        <input type="text" name="carryOver" id="cO"/>
    </form>
</div>
<div id="addends1" class="addends"> </div>
<div id="addends2" class="addends"> </div>
<div id="resultContainer">
    <form>
        <input type="text" id="result10s" class="result">
        <input type="text" id="result1s" class="result">
    </form> 
</div>
<div id="button" onclick=evaluate();>
    <img src="next.png" alt="next" onload="generate();"/>
    </div>
</body>

我怀疑问题可能在于我是如何从表单字段中提取和存储值的?

1 个答案:

答案 0 :(得分:0)

由于可能存在许多问题,我会逐步帮助您,而不是试图为您提供整个解决方案。 (现在是周末,所以我可以更频繁地回复。)

第一个问题在于您定义和使用功能的方式。你的语法,

var evaluate = function() {
    // ...
}

定义分配给变量 generate匿名函数。为了比较,以下是常规函数的定义方式:

function evaluate() {
    // ...
}

如果调用正确,您的语法可以正常工作,但您可以像常规函数一样调用它:

document.getElementById("button").onclick=evaluate();

发生了什么,而对于常规函数,函数evaluate()将被分配给onclick事件,对于匿名函数evaluate和{{1被解释为调用此变量中的匿名函数。因此,()会立即被调用,而不是evaluate()Here's a JSFiddle显示您的表单字段如何立即替换。

一旦您解决了这个问题,请更新您的问题并对我的回答发表评论以引起我的注意,我们会从那里接受它。

顺便说一句,如果您正在使用Chrome,请按 Ctrl Shift I 并转到控制台< / kbd>标签,看看你的Javascript是否引发了任何问题。 Firefox在菜单中有类似的功能 - 查找开发人员工具。