javascript - 添加表单值而不超过javascript中的总值

标签 javascript html forms

我真的不是程序员,但我正在尝试学习如何使用 html 和 javascript 制作问卷:

我在一个表单中有四个选择框。每个选择框的值都在 0 到 10 之间。此问卷的主要规则是更改所有四个选择框的值,使其总和为 10。

我想出了以下解决方案:

  • 即时更新文本框,计算所选总值(使用 onChange);
  • 如果选择的总值 为 10(不多也不少),则在提交按钮处验证。

或者,当用户选择的值超过 总值 10 时,我什至会立即分配一条(错误)消息。

我有一些半生不熟的 javascript,但我对这个主题没有足够的了解,无法准确地将这些点联系起来。希望你能帮助我。

蒂姆

我的框架:

<html>
<head>
<script type="text/javascript">
function editTotalValue(){

}

function  validateTotalValue(){

}
</script>

</head>
<body>
<form name="form1">
<select name="question1" onChange="editTotalValue();">
  <option selected value="0">0</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
  <option value="5">5</option>
  <option value="6">6</option>
  <option value="7">7</option>
  <option value="8">8</option>
  <option value="9">9</option>
  <option value="10">10</option>
</select>
<select name="question2" onChange="editTotalValue();">
  <option selected value="0">0</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
  <option value="5">5</option>
  <option value="6">6</option>
  <option value="7">7</option>
  <option value="8">8</option>
  <option value="9">9</option>
  <option value="10">10</option>
</select>
<select name="question3" onChange="editTotalValue();">
  <option selected value="0">0</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
  <option value="5">5</option>
  <option value="6">6</option>
  <option value="7">7</option>
  <option value="8">8</option>
  <option value="9">9</option>
  <option value="10">10</option>
</select>
<select name="question4" onChange="editTotalValue();">
  <option selected value="0">0</option>
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
  <option value="4">4</option>
  <option value="5">5</option>
  <option value="6">6</option>
  <option value="7">7</option>
  <option value="8">8</option>
  <option value="9">9</option>
  <option value="10">10</option>
</select>
<!-- Show total value selected in text box -->
<input name="totalValue" type="text" maxlength="2" readonly="true">
<!-- Validate that totalValue(); is indeed 10 and not more or less and pass on the data -->
<input name="submit" type="button" onClick="validateTotalValue();">
</form>
</body>
</html>

最佳答案

这里有一些你可以玩的更深入的东西:

document.getElementById("form1").onsubmit = checkTarget;

function checkTarget(evt)
{
    var el;  
    if(window.event)
    {
        //checking for IE equivalent
        el = window.event.srcElement;  
    }else if(evt.target)
    {
        el = evt.target;       
    }
    if(window.event)
    {
        //checking for IE equivalent
        window.event.returnValue = false;   
    }else if(evt.preventDefault)
    {
        evt.preventDefault();   
    }
    calculateValues(el);
}

function calculateValues(form)
{
    var values = [];
    var value = 0;
    for(var i=0;i<form.elements.length;i++)
    {
        var el = form.elements[i];
        if(el.tagName === "SELECT")
        {
            values.push(el.value);   
        }
    }
    for(var j=0;j<values.length;j++)
    {
        value = value + parseInt(values[j], 10);
    }
    updateValue(value);
    checkValue(values, value);
}

function updateValue(value)
{
     document.getElementById("result_box").value = value;             
}

function checkValue(values, value)
{
    var temp = [];
    for(var i=0;i<values.length;i++)
    {
        if(values[i] > 0 && values[i] < 10)
        {
            temp.push(values[i]);
        }  
    }
    if(value === 10 && temp.length === 4)
    {
        document.getElementById("message_box").value = "You win!";
    }else if(value > 10 && temp.length === 4)
    {
        document.getElementById("message_box").value = "Value is more than 10";  
    }
}

http://jsfiddle.net/YS6mm/9/

测试工作在:Firefox 4、IE8、IE8 兼容性 View (Quirks)、IE7 Quirks 模式、Chrome 4、Safari 4 和 Opera 11。

关于javascript - 添加表单值而不超过javascript中的总值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5428316/

相关文章:

Javascript/Html/Css 来自两个 javascript 数组的随机背景图像和 Word

python - 移动 app.py 和 static 文件夹后 Flask 无法解析静态文件

javascript - 如何修改此代码以使 div 的最小高度为 660px?

python - forms.py 文件应位于何处?

javascript - canvas 上下文 - 缓存 window.requestAnimationFrame 回调函数的变量值

javascript - 如何在 ES6 中注入(inject)指令 Controller

javascript - 更好地循环函数或使用循环调用函数?为什么?

Javascript 显示来自 twitter api 的动画 gif

ruby-on-rails - 嵌套表单 Rails

forms - Twitter Bootstrap div 对齐