【问题标题】:Checkbox checked with javascript does not POST用 javascript 检查的复选框不会 POST
【发布时间】:2014-09-11 11:11:13
【问题描述】:

我有一个使用 php 生成的包含 27 个复选框的数组。手动检查复选框效果很好。复选框被放置在一个 html 表格中(包括其他日期的表格),(都在表单标签内)具有 name="chk[]' 和 value='Index Number' 的数组 (0-27) 以通常的形式的

当我执行一个典型的 Java 脚本“检查所有”功能(来自 link_click 或 button_click)时,所有复选框都将复选框显示为“已选中”。但是,什么都没有提交。当我提交时,Print_r 显示“chk”数组确实为空!

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

似乎在使用 Javascript 选中复选框时,不会发布“已选中​​”值。

只要使用 Javascript 设置 'displayed' 值,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>

【问题讨论】:

  • 您发布了 uncheckall 函数而不是 checkall 函数。请更正此问题,以便我们为您提供帮助。
  • 感谢 iSWORD - 我需要更少的速度和更多的速度啊!

标签: javascript php arrays checkbox


【解决方案1】:

你的 if 条件有两个错误。

  1. 它甚至不是一个条件,它是一个赋值语句(条件写成 双等号)
  2. 元素名称应与 chk[] 而不是 chk 进行比较

您的检查功能应该是:

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 正在执行,这就是为什么您可以看到检查的元素。现在,当您在 PHP 中请求 $_POST['chk[]'] 时,您什么也得不到,因为元素的名称都被您所谓的(如果“条件”)更改为“chk”。

【讨论】:

  • SWORD,这是一个很棒的解释人。 “显示”值的“未发布”完全让我着迷。谢谢教。我不确定我如何完全“接受”您的回答。我觉得界面不是很直观,我去查一下帮助就行了。谢谢大佬。
【解决方案2】:

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[]"]');

【讨论】:

    【解决方案3】:

    你可以试试这个功能

    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>
    

    【讨论】:

      猜你喜欢
      • 2021-11-01
      • 2013-06-21
      • 1970-01-01
      • 2015-07-28
      • 1970-01-01
      • 2011-07-30
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多