使用javascript检查复选框不会POST

时间:2014-09-11 02:19:55

标签: javascript php arrays checkbox

我有一个使用php生成的27个复选框的数组。手动选中复选框可以很好地完成。复选框放在一个html表(包括其他表格日期),(所有表格标签内),其中name =“chk []'和value ='索引号'的数组(0-27),通常的形式的

当我执行典型的Java脚本“全部检查”功能时(来自link_click或button_click),复选框全部显示复选框为“已检查”。但是,没有提交任何内容。当我提交时,Print_r显示'chk'数组确实是空的!

如果我手动设置复选框,则会发布$ _POST('chk')数组,一切都按预期工作。

当使用Javascript检查复选框时,“检查​​”值似乎没有发布。

每当使用Javascript设置'显示'值时,

Print_r确认'chk'数组为空!

有人可以尝试向我解释为什么复选框的“显示值”不会反映或包含在帖子中吗?

该页面在W3C上验证确定,我已经抓取了我的代码,但找不到任何可能的错误。平台是Win7 / Wamp Sever / Firefox。 Google / StackOverflow搜索未显示任何类似的症状/解决方案。

非常感谢任何对这个问题有所了解的人。

我使用的javascript CheckAll函数是 -

function checkall(frm) {
  for (var i=0; i<frm.elements.length; i++) {
  if (frm.elements[i].name = "chk")
  {frm.elements[i].checked = true;}
  }
  }   

27个复选框的数组采用正常数组格式,“value”为数组索引。

<tr><td><input type='checkbox' title='' name='chk[]' value='6' ></td> text label </tr>

3 个答案:

答案 0 :(得分:4)

if条件中有两个错误。

  1. 它甚至不是一个条件,它是一个赋值语句(条件是用 双等号)
  2. 元素名称应与 chk [] 进行比较,而不是 chk
  3. 您的checkall功能应该是:

    function checkall(frm) {
      for (var i=0; i<frm.elements.length; i++) {
        if (frm.elements[i].name == "chk[]")
          frm.elements[i].checked = true;
      }
    }
    

    现在你可能想知道这与未提交的值有什么关系,以及为什么要检查它们,我可以解释一下。

    您当前的代码正在为复选框元素分配一个新名称“chk”(请参阅​​原因1为什么您的条件甚至不是条件),并且由于它不是条件,因此if语句始终为true,并且代码段正在执行将checked值设置为true的原因,这就是为什么你可以看到检查的元素。现在当你在你的PHP中请求$ _POST ['chk []']时你什么也得不到,因为你所谓的(如果是“条件”)元素的名字都被改为'chk'。

答案 1 :(得分:0)

iSWORD有一个完整的答案,这只是一些额外的提示。您可以利用内置的浏览器功能简化功能:

function checkall(frm) {
  var cbs = frm['chk[]'];
  for (var i=0, iLen=cbs.length; i<iLen; i++) {
    cbs[i].checked = true;
  }
}  

表单控件可用作表单的命名属性。如果多个控件共享同一名称,则返回HTML集合。因此,在上文中, cbs 是名称为'chk[]'的所有控件的集合。

要考虑可能存在零个,一个或多个同名控件的情况,请使用:

function checkall(frm) {
  var cbs = frm['chk[]'];
  if (cbs) {
    if (typeof cbs.length == 'number') {
      for (var i=0, iLen=cbs.length; i<iLen; i++) {
        cbs[i].checked = true;
      }
    } else {
      cbs.checked = true;
    }
  }
}  

你也可以使用 querySelectorAll ,它总是返回一个集合(但可能无处可用)并在第一个函数中使用以下内容:

var cbs = document.querySelectorAll('input[name="chk[]"]');

答案 2 :(得分:0)

您可以尝试使用此功能

的Javascript

function checkall(formname,checkname,thestate){
    var el_collection=eval("document.forms."+formname+"."+checkname)
    for (c=0;c<el_collection.length;c++)
    el_collection[c].checked=thestate
}

HTML

<a href="javascript:checkall('test','chk',true)">Check All</a>
<a href="javascript:checkall('test','chk',false)">Uncheck All</a>