【问题标题】:Form Data is not captured correctly未正确捕获表单数据
【发布时间】:2014-10-23 17:07:05
【问题描述】:

我尝试了以下方法来捕获复选框选择时的值“1”和取消选择复选框时的值“0”。我面临的问题是,如果我选中该复选框,则会捕获值“1”,但如果我没有选中该复选框,则不会在表单数据上捕获值 =“0”。

JS:
    <script>
    function setvalue() {
    if (document.getElementById('binary').checked = true) {
       document.getElementById('binary').value='1';
    } else {
        document.getElementById('binary').value='0';
    }
    </script>


HTML:
    <input name="Maximize" id="binary" type="checkbox" value=" ">

【问题讨论】:

  • 查看格式颜色。你看出什么不对了吗?提示:你错过了结束 }
  • = true 更改为 === true= 单独是一个赋值运算符,所以 value 总是被设置为 "1" 并且永远不会进入 else 部分
  • 天哪,请不要分配字符串化的数字。 10 就可以了
  • @SterlingArcher:你能详细解释一下吗?
  • 默认情况下元素值是字符串,但将整数用引号括起来是一种不好的做法。就像if (x == "true"),其中 true 现在是字符串而不是布尔值。另外,缓存你的元素,这样你就不必每次都调用document.getElementById("binary")

标签: javascript html


【解决方案1】:

未选中的复选框将不会被提交。

在复选框前插入隐藏输入:

<input name="Maximize" type="hidden" value="0">
<input name="Maximize" type="checkbox" value="1">

但是,它是多余的。当您在服务器端解析表单数据时,只需假设未设置变量时的值为0

【讨论】:

  • 我试过这个。它只捕获“0”。当我选中复选框时,不会捕获值“1”
  • 被什么捕获?当您发送表单并且复选框已被选中时,将提交 1,否则将提交 0
  • 无论我有没有检查,它总是捕获“0”。你能更正我上面的代码并告诉我怎么做吗?
  • 正确,当控件(表单域)不成功时脚本在此处无济于事(并且复选框仅在选中时才成功)。请参阅:successful controls。我的建议使用隐藏的输入(0)默认,并且检查复选框(1)时,它将覆盖隐藏的输入。不需要脚本。
【解决方案2】:

这一行

if (document.getElementById('binary').checked = true) {

应该是

if (document.getElementById('binary').checked == true) {

if (!!document.getElementById('binary').checked) {

没有?

【讨论】:

  • 有趣的转换为布尔值。没有多少人像这样使用它
  • 你可以阅读this answer了解更多详情:-)
猜你喜欢
  • 1970-01-01
  • 2019-02-26
  • 2016-01-08
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多