未正确捕获表单数据

Posted

技术标签:

【中文标题】未正确捕获表单数据【英文标题】: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") 【参考方案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了解更多详情:-)

以上是关于未正确捕获表单数据的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的 ReferenceError:未定义数据

Vuelidate 未正确验证表单数据

提交表单数据后,页面未在 laravel 中正确加载

未捕获的引用错误:未在loadEventListeners上定义表单

提交表单后模态弹出窗口未正确关闭

使用输入表单标记中的onclick属性的JavaScript未捕获引用错误