[英]JavaScript and PHP parameters
我有一個表單,我使用JavaScript驗證它。
現在,當我提交表單時,我無法使用該表單中的復選框。
這是我的JS的一部分,它計算並驗證復選框。
<script type="text/javascript">
function validateForm()
{
//My Declarations
var cases = addClients.caseType.length;
var total = 0;
var fnReturn = true;
//My Script goes here
for (var idx = 0; idx < cases; idx++)
{
if (addClients.caseType[idx].checked == true)
total += 1;
}
if (total == 0)
{
document.getElementById('caseErr').style.visibility =" visible";
fnReturn = false;
}
else
document.getElementById('caseErr').style.visibility = "hidden";
return (fnReturn == true)?true:false;
}
</script>
表單提交數據的下一頁如下(復選框的部分):
<?php
$cases = $_POST['caseType'];
for ($i=0;$i<count($cases);$i++)
echo "<li>$cases[$i] \n";
回顯$cases
僅打印所選復選框的一個字母。
我想知道我在這里做錯了什么。
編輯:
這是我的表格
<form id="addClients" method="post" action="confirmAdd.php" onsubmit="return validateForm();">
<table border="0">
<tr align="center">
<th align="center">Client Last Name:</th>
<td colspan="3" align="center"><input type="text" name="clname" width="300%"></td>
<td id="lnErr" style="visibility:hidden">Last Name Required!</td>
</tr>
<tr align="center">
<th align="center">Client First Name:</th>
<td colspan="3" align="center"><input type="text" name="cfname" width="300%"></td>
<td id="fnErr" style="visibility:hidden">First Name Required!</td>
</tr>
<tr align="center">
<th align="center">Client Telephone:</th>
<td colspan="3" align="center"><input type="text" name="ctel" width="300%"></td>
<td id="telErr" style="visibility:hidden">Telephone Required (without hyphins '-')!</td>
</tr>
<tr align="center">
<th>Cases:</th>
<td align="center">Rape<input type="checkbox" name="caseType[]" value="rape"></td>
<td align="center">Drug Accusition<input type="checkbox" name="caseType[]" value="Drug Accusition"></td>
<td align="center">Assult<input type="checkbox" name="caseType[]" value="Assult"></td>
<td id="caseErr" style="visibility:hidden">At least one required!</td>
</tr>
</table>
<input type="submit" value="Add Client">
</form>
解:
我通過谷歌搜索找到了解決問題的方法......
首先,每個復選框的名稱都有[]
Rape<input type="checkbox" name="caseType[]" value="rape">
Drug Accusition<input type="checkbox" name="caseType[]" value="Drug Accusition">
Assult<input type="checkbox" name="caseType[]" value="Assult">
然后,在javascript中我添加了這部分:
var t=0;
var c=addClients['caseType[]'];
for(var i=0;i<c.length;i++)
c[i].checked?t++:null;
其中addClients
是我的表單的名稱。
然后我嘗試了我附加的PHP,它列出了應該的值。
在輸入的名稱中,您需要在名稱的末尾添加[]。
<input type='checkbox' name='caseType[]' />
<script type="text/javascript">
function getCheckBoxes( formID, name ) {
var form = document.getElementById(formID);
var checkboxes = form.getElementsByTagName('input');
var returnArray = new Array();
for (var i=0; i<checkboxes.length; i++) {
if(checkboxes[i].name == name) {
returnArray.push(checkboxes[i]);
}
}
return checkBoxes;
}
function validateForm()
{
//My Declarations
var cases = getCheckBoxes('addClients', 'caseType[]');;
var total = 0;
var fnReturn = true;
//My Script goes here
for (var idx = 0; idx < cases.length; idx++)
{
if (cases[idx].checked == true)
total += 1;
}
if (total == 0)
{
document.getElementById('caseErr').style.visibility =" visible";
fnReturn = false;
}
else
document.getElementById('caseErr').style.visibility = "hidden";
return false;
}
</script>
首先是錯誤的是addClients
是未定義的。 也許你的意思是document.forms.id_of_form.addClients
?
第二件事是錯誤的是PHP的默認表單處理庫,與幾乎所有其他表單數據解析庫相反,它們以字符[]
結尾的名稱附加特殊含義。 由於您似乎是在一組元素上循環,因此復選框的名稱是addClients[]
而不是addClients
,因此您需要: document.forms.id_of_form['addClients[]']
(使用方括號表示法) as []
在JavaScript中也有特殊含義)。
所以:
$cases = $_POST['caseType'];
//normalize to an array
if(!is_array($cases))$cases=array($cases);
//iterate over the cases.
foreach($cases as $key=>$case){
echo"<li>$case</li>\r\n";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.