【问题标题】:How to submit 0 if checkbox is unchecked and submit 1 if checkbox is checked in HTML [duplicate]如果未选中复选框,如何提交 0,如果在 HTML 中选中复选框,如何提交 1 [重复]
【发布时间】:2015-09-30 18:10:08
【问题描述】:

如果复选框数组中的复选框被选中,如何提交值 1,如果未选中,如何提交 0?我试过这个但没有运气。提交表单时,我试图在 php 数组中获取此数组。请帮忙!

<input id = 'testName0' type = 'checkbox' name = 'check[0]' value = '1' checked>
<input id='testNameHidden0'  type='hidden' value='0' name='check[0]'>

<input id = 'testName1' type = 'checkbox' name='check[1]' value = '1' unchekced>
<input id='testNameHidden1'  type='hidden' value='0' name='check[1]'>

<input type = 'submit' value = 'Save Changes'>
>
<script>
if(document.getElementById('testName0').checked){
  document.getElementById('testNameHidden0').disabled = true;
}
</script>

<script>
if(document.getElementById('testName1').checked){
  document.getElementById('testNameHidden1').disabled = true;
}
</script>

【问题讨论】:

    标签: javascript php html forms checkbox


    【解决方案1】:

    最简单的一种,不需要javascript,只需在复选框前添加一个隐藏的输入即可:

    <input type="hidden" name="check[0]" value="0" />
    <input type="checkbox" name="check[0]" value="1" />
    

    输入需要具有相同的名称。如果选中该复选框,则将提交值 1,否则来自隐藏输入的值 0。

    您的情况javascript解决方案,无需隐藏输入:

    <script type="text/javascript">
        // when page is ready
        $(document).ready(function() {
             // on form submit
            $("#form").on('submit', function() {
                // to each unchecked checkbox
                $(this + 'input[type=checkbox]:not(:checked)').each(function () {
                    // set value 0 and check it
                    $(this).attr('checked', true).val(0);
                });
            })
        })
    </script>
    
    <form method="post" id="form">
        <input type="checkbox" name="check[0]" value="1" />
        <input type="checkbox" name="check[1]" value="1" />
        <input type="submit" value="Save Changes" />
    </form>
    

    PHP 解决方案,无需隐藏输入:

    <?php
        // if data is posted, set value to 1, else to 0
        $check_0 = isset($_POST['check'][0]) ? 1 : 0;
        $check_1 = isset($_POST['check'][1]) ? 1 : 0;
    ?>
    
    <form method="post">
        <input type="checkbox" name="check[0]" value="1" />
        <input type="checkbox" name="check[1]" value="1" />
        <input type="submit" value="Save Changes" />
    </form>
    

    编辑:从 jquery 1.6 开始,javascript 解决方案不再有效。基于this,更合适的解决方案如下:

    <script type="text/javascript">
        // when page is ready
        $(document).ready(function() {
             // on form submit
            $("#form").on('submit', function() {
                // to each unchecked checkbox
                $(this).find('input[type=checkbox]:not(:checked)').prop('checked', true).val(0);
            })
        })
    </script>
    
    <form method="post" id="form">
        <input type="checkbox" name="check[0]" value="1" />
        <input type="checkbox" name="check[1]" value="1" />
        <input type="submit" value="Save Changes" />
    </form>
    

    【讨论】:

    • 但是这个 javascript 有什么问题?
    • 这样简单的任务真的没有必要使用javascript。但我已经编辑了我的答案以包括 javascript 和 php 解决方案。
    • 重要提示:如果选中该复选框,HTTP 请求将包含这两个值。 (还是我误会了什么?)
    • 这帮助我理解了 getAttribute 方法作为一个整体是如何工作的
    • 在我的情况下,我需要 javascript,因为我使用命名字段数组,所以感谢更新
    【解决方案2】:

    一个更好的解决方案为我解决了这个问题。

    问题:隐藏的和选中的都发送到我的服务器。

    解决办法:

    if len(key) == 1 {
      value = false
    } else {
      value = true
    }
    

    这样,如果 len(key) 为 1,我知道只有隐藏字段被发送。任何其他情况都意味着该框已选中。简单易行。

    【讨论】:

      【解决方案3】:

      好吧,我有一个更简单的代码,对我来说效果很好:

      <input type="checkbox" value="true" id="checkBox">
      

      然后是JQuery代码:

      var checkBoxValue = $('#checkBox').is(':checked')?$('#checkBox').val():false
      

      我使用三元运算符来设置选中和未选中条件的值。

      【讨论】:

      • 你在这里介绍了jQuery,问题中根本没有提到它。
      • @JonP 获得 57 票赞成的选定答案也使用 Jquery 作为主要解决方案。我认为对答案投反对票并不遥远,因为它使用了一个库。无论结果如何获得,这都是一个答案。
      • @AFriend,不要以为我投了反对票。一年多以前,我只是发表了评论。
      • @JonP 我只是将我评论的第一句话指向你,伙计。
      猜你喜欢
      • 2013-08-12
      • 1970-01-01
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 2015-08-24
      • 2020-03-20
      • 1970-01-01
      相关资源
      最近更新 更多