代码之家  ›  专栏  ›  技术社区  ›  Carson Myers

HTML复选框元素仅在选中时才提交?

  •  5
  • Carson Myers  · 技术社区  · 14 年前

    我试图在一个现有的网站上工作,我发现了一个bug,但我不知道为什么是bug,也不知道如何解决它。

    该网站基本上列出了一些在一个城市租赁的商业地产。有一个类,它从数据库中获取列表并从每个列表中创建一个对象。在每个对象中都有一个与该属性关联的图像数组。

    当用户编辑一个列表时,他们会得到一个编辑页面,其中有一个图像列表,旁边还有一个“删除”复选框。这些复选框都具有相同的名称,因此当它们被提交回服务器时,应用程序会得到一组要删除的图像。

    应该发生的是,应用程序有这个开/关值数组(其中on=delete),数组中每个值的索引对应于列表对象中图像的索引——当其中一个值为“on”时,与“on”值对应的图像数组中的文件名将从文件系统中删除,该图像将被重新已从数据库中移动。

    但是,提交表单时,应用程序只获得一个包含复选框的0索引数组。因此,如果我设置三个任意图像进行删除,应用程序将

    Array {
       [0] => "on",
       [1] => "on",
       [2] => "on"
    }
    

    这显然不起作用,无论设置了哪个复选框,列表中的前3个图像都将被删除。

    我怎么修这个?我想避免为每个复选框命名( delete_1 , delete_2 , delete_3 等),因为系统已经构建为使用具有相同名称的所有复选框。是否有一种方法可以强制所有复选框以“开”或“关”的形式提交?

    6 回复  |  直到 7 年前
        1
  •  5
  •   Fred Nurk    14 年前

        2
  •  6
  •   zerkms    14 年前

    <input type="hidden" name="delete[42]" value="off" />
    <input type="checkbox" name="delete[42]" value="on" />
    
        3
  •  1
  •   Gert Grenander Keiron Lowe    14 年前

    $(function () {
      $("#myform").submit(function(){
        $("input[name='delete']:not(:checked)").attr("checked","checked").val("off");  
      });
    }); 
    

    myform delete

        4
  •  1
  •   Carson Myers    14 年前

    $('#yourForm').submit(function(){
        var array = new Array();
        $('input[name="nameOfCheckboxes"]').each(function(index){
            array[index] = $(this).value();
        }
        var r = $.param(array);
        $('#someHiddenFieldInForm').value(r);
     }
    

        5
  •  1
  •   Jay    14 年前

        6
  •  0
  •   Peter Hanley    7 年前

    ternary operators

    <input type="checkbox" name="notify_users" id="notify_cb">
    

    // normal boolean value    
    $notify_users = ((!empty($_POST['notify_users']) and $_POST['notify_users'] == 'on' );    
    // explicitly set a 1 or 0
    $notify_users = ((!empty($_POST['notify_users']) and $_POST['notify_users'] == 'on' )? 1 : 0);
    // explicitly set 'yes' or 'no'
    $notify_users = ((!empty($_POST['notify_users']) and $_POST['notify_users'] == 'on' )? 'yes' : 'no');