我有一个表单,允许用户从多选字段中选择最多X个选项。如果用户选择的项目大于其提示的X项目,则取消选择最后选择的项目。
前一个多选项抛出警告消息时出现问题。
表单有4个多选项,所以如果它在第三个多选项上抛出或者前一个多选择已经达到最大数量,它将为下一个多选择抛出错误,无论是否用户选择正确的号码。
这是一段代码段。页面上的其他选项以相同的方式构建,但使用不同的名称:
<select multiple name="seasons[]" size="6" id="seasons" onChange="countSelected(this,5)">
<option value=0>Hold CTRL to select more than one</option>
<?
$ftw = mysql_query("SELECT s.seasonId, s.type FROM seasons s ORDER BY s.seasonId ASC");
while ($line = mysql_fetch_array($ftw)) {
$queried = mysql_query("SELECT seasonId FROM selectedSeason where seasonId = '$line[0]' AND id = '$objItem->itemId'");
if(mysql_fetch_row($queried))
echo "<option selected value=\"$line[0]\">". $line[1] ."</option>";
else
echo "<option value=\"$line[0]\">". $line[1] ."</option>";
}
?>
</select>
这是javascript警告:
var selectedOptions = [];
function countSelected(select,maxNumber){
for(var i=0; i<select.options.length; i++){
if(select.options[i].selected && !new RegExp(i,'g').test(selectedOptions.toString())){
selectedOptions.push(i);
}
if(!select.options[i].selected && new RegExp(i,'g').test(selectedOptions.toString())){
selectedOptions = selectedOptions.sort(function(a,b){return a-b});
for(var j=0; j<selectedOptions.length; j++){
if(selectedOptions[j] == i){
selectedOptions.splice(j,1);
}
}
}
if(selectedOptions.length > maxNumber){
var throwAlert = true;
select.options[i].selected = false;
selectedOptions.pop();
}
}
if(throwAlert == true){
alert('You may only choose '+maxNumber+' options!!');
document.body.focus();
}
}
季节需要是season []所以它可以向PHP发布多个值。我只是使用javascript发布或检索数据没有问题。错误发生在IE,FF和Safari中,但不是Chrome ...唉。
任何想法都是非常宝贵的。
答案 0 :(得分:0)
我想你需要将selectedOptions变成一个多维数组的行
selectedOptions[0][0] /// indicating to first select box option 1
selectedOptions[0][1] /// indicating to first select box option 2
这些方面的东西应该有用。
编辑: 如果你想这样做,快速和脏的方式有selectedOptions1 [] selectedOptions2 []等,并使用if else语句在js函数的开头使用正确的数组。