尝试使用POST数据传递0以取消选中未选中的复选框

时间:2014-05-20 20:52:28

标签: jquery post checkbox

我有一个页面,用户可以动态地(jQuery)创建一个表。它稍后将作为表格提交。

某些表格单元格中可能包含一个复选框。并非所有表行都具有该复选框。我的目标是在POST数据中包含所有三种可能的状态,以便我的POST阵列都具有相同数量的项目。

  1. 复选框已显示并已选中= 1
  2. 复选框存在且未选中= 0
  3. 复选框不存在= 0
  4. fiddle here基本机制设置(从this answer得到一些小提琴j)。我不确定如何用它来说明提交的表单。

    如果我在表格中添加三个项目(基于上面的有序列表),我会得到不同的结果,因此...

    • 这三项都是#1 =

      ["add_logo"] array(3) {
      [0] "1"
      [1] "1"
      [2] "1"
      }
      
    • 这三项都是#3 =

      ["add_logo"] array(3) {
      [0] "0"
      [1] "0"
      [2] "0"
      }
      
    • 这三项都是#2 = nothing is POSTed

    • 添加项目2,1,3 = item with unchecked checkbox not included

      ["add_logo"] array(2) {
      [0] "1"
      [1] "0"
      }
      

    等等......基本上,似乎我根本没有发送未经检查的复选框。我想我只是不明白为什么each()位可以正常工作,因为它可以将值从on更改为1,但无法将值设置为{ {1}}。

    我尝试了隐藏的输入位来克服这个驼峰,但它对我不起作用......我在想,因为每个表单条目都没有什么独特之处?

    最后,如果我在我链接的答案中添加了0,则只需将所有复选框值设置为$(this).attr('checked', true);

1 个答案:

答案 0 :(得分:1)

我想我明白了......

似乎我无法设置未选中复选框的值。从我读过的所有其他问题来看,我想我并不感到惊讶。无论你给他们什么价值,那些未经检查的复选框都没有张贴。

最后,我对提交表单时执行的代码进行了更改。我更改了三元组,如果未选中此框,则尝试将值设置为0,只需删除复选框并将其替换为隐藏字段(如果未选中)。

所以从这......

$("#submit").click(function () {
    $('input:checkbox[name^=add_logo]').each(function () {
        $(this).attr('value', $(this).is(':checked') ? '1' : '0');
    });
});

......对此...

$("#submit").click(function () {
    $('input:checkbox[name^=add_logo]').each(function () {
        $(this).prop("checked") ? $(this).attr('value','1') : $(this).html("<input type='hidden' name='add_logo[]' value='0' />");
    });
});

当谈到jQuery / javascript时,我很绿,所以我不确定是否会回来咬我,但我还没能打破它。