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)
回答:
array_key_exists()更新:
这是一个用于实现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_).
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)
| 归档时间: |
|
| 查看次数: |
27148 次 |
| 最近记录: |