HTML表单中的复选框数组

Nyx*_*nyx 8 html javascript php mysql codeigniter

我有一个关于复选框的问题.

<form method="post">
I speak the following languages:
<input type="checkbox" name="lang[]" value="en">English<br />
<input type="checkbox" name="lang[]" value="fr">Français<br />
<input type="checkbox" name="lang[]" value="es">Español<br />
</form>
Run Code Online (Sandbox Code Playgroud)

是否有必要将复选框命名为lang [](使用数组),或者我可以为每个复选框指定一个单独的名称,例如:

<form method="post">
I speak the following languages:
<input type="checkbox" name="lang_en" value="en">English<br />
<input type="checkbox" name="lang_fr" value="fr">Français<br />
<input type="checkbox" name="lang_es" value="es">Español<br />
</form>
Run Code Online (Sandbox Code Playgroud)

问题1我认为两者都有效,如果有,你什么时候决定使用哪个?

问题2我正在使用上面列出的第二种方法,所以我可以使用PHP来检测哪个复选框是使用类似的代码进行选择的if(isset($_POST['lang_en'])).如果我要使用第一种方法,是否有一种快速方法可以检查是否选中了特定的复选框?目前,我能想到的未经测试的解决方案涉及if(in_array('lang_en', $_POST['lang']))到检查它是否存在于$ _POST中.

问题3主要问题是:我正在使用第二种方法,因此我可以轻松检查PHP中是否选中了复选框.现在我想添加一个文本链接,单击该链接将选中所有复选框.我的Javascript不太好,所以我使用http://www.shiningstar.net/articles/articles/javascript/checkboxes.asp中的脚本,但示例脚本使用数组作为复选框的名称,而我的PHP代码无法检查如果使用数组选中复选框,则使用复选框的名称.如何修改javascript代码以便在没有数组的情况下工作?

希望我能弄清楚这个恼人的问题!谢谢!

编辑

使用Javascript:

<!-- Begin
function checkAll(field)
{
for (i = 0; i < field.length; i++)
    field[i].checked = true ;
}

function uncheckAll(field)
{
for (i = 0; i < field.length; i++)
field[i].checked = false ;
}
//  End -->
</script>
Run Code Online (Sandbox Code Playgroud)

HTML:

<form action="http://localhost/website/places/search" method="post" accept-charset="utf-8" name="subcategory">

<ul>
  <li><input type="checkbox" name="cuisine_American" value="American" /> American</li>
  <li><input type="checkbox" name="cuisine_Chinese" value="Chinese" onClick="checkAll(document.subcategory.cuisine)" /> Chinese</li>
  <li><input type="checkbox" name="cuisine_Indian" value="Indian" onClick="checkAll(document.subcategory.cuisine)" /> Indian</li>
  <li><input type="checkbox" name="cuisine_Japanese" value="Japanese" onClick="checkAll(document.subcategory.cuisine)" /> Japanese</li>
  <li><input type="checkbox" name="cuisine_Korean" value="Korean" onClick="checkAll(document.subcategory.cuisine)" /> Korean</li>
  <li><input type="checkbox" name="cuisine_Mexican" value="Mexican" onClick="checkAll(document.subcategory.cuisine)" /> Mexican</li>
  <li><input type="checkbox" name="cuisine_Middle Eastern" value="Middle Eastern" onClick="checkAll(document.subcategory.cuisine)" /> Middle Eastern</li>
  <li><input type="checkbox" name="cuisine_Pakistani" value="Pakistani" onClick="checkAll(document.subcategory.cuisine)" /> Pakistani</li>
  <li><input type="checkbox" name="cuisine_Italian" value="Italian" onClick="checkAll(document.subcategory.cuisine)" /> Italian</li>
</ul>

</form>
Run Code Online (Sandbox Code Playgroud)

AJ.*_*AJ. 6

回答:

  1. 两者都有效......取决于您是否需要显式名称或数组
  2. 你也可以使用 array_key_exists()
  3. 你可以将你正在使用的javascript代码发布到你的问题中吗?我会再看看......

更新:

这是一个用于实现onclick处理程序的jQuery解决方案:

function checkAll(field){
    $(':checkbox[name^="cuisine_"]').each(function(index){
        this.checked=true;
    });
}

function uncheckAll(field){
    $(':checkbox[name^="cuisine_"]').each(function(index){
        this.checked=false;
    });
}
Run Code Online (Sandbox Code Playgroud)

请注意,您确实不需要传入field,除非您想要概括它并传入字符串中的startswith模式(例如cuisine_).


Jar*_*zyk 6

1.两种工作方式,使用lang []的解决方案更加灵活.例如,如果你有一个很长的表单,其中包含几个类别中的复选框列表,例如.用户说话的语言,他访问过的国家,他驾驶过的汽车,并且假设每个列表由10个元素组成,然后对其中的每一个进行硬编码都是一个痛苦......在PHP方面你必须手动检查每个元素,使用数组,您可以这样做:

if (isset($_POST['lang'] && is_array($_POST['lang'])
{
   // let's iterate thru the array
   foreach ($_POST['lang'] as $lang)
   {
      // do some super-magic here
      // in your example array elements would be $_POST['lang'] = array('en','fr','es')
   }
}
Run Code Online (Sandbox Code Playgroud)

2.如上所述检查是否选择了任何语言检查:

if (in_array('en', $_POST['lang']))
Run Code Online (Sandbox Code Playgroud)

3.如果您打算使用jQuery,只需使用以下代码段:

// selector ATTRIBUTE*=VALUE find all tags wchich ATTRIBUTE string contains VALUE
$('input[name*=lang]').attr('checked', 'checked'); // check
$('input[name*=lang]').removeAttr('checked'); // uncheck
Run Code Online (Sandbox Code Playgroud)