Поэтому я пытаюсь использовать следующий скрипт:
//Limit of checked checkboxes
function checkboxlimit(checkgroup, limit){
var checkgroup=checkgroup
var limit=limit
for (var i=0; i<checkgroup.length; i++){
checkgroup[i].onclick=function(){
var checkedcount=0
for (var i=0; i<checkgroup.length; i++)
checkedcount+=(checkgroup[i].checked)? 1 : 0
if (checkedcount>limit){
alert("You can only select a maximum of "+limit+" checkboxes")
this.checked=false
}
}
}
}
//change bg color if checked
var seleccionado=new Array()
function cambia(fila){
if(seleccionado[fila]!=true)
{
document.getElementById("fila"+fila).style.background='#A5FA9B';
document.getElementById("fila"+fila).style.color='#FFFFFF';
seleccionado[fila]=true;
}
else
{
document.getElementById("fila"+fila).style.background='#FFF3D6';
document.getElementById("fila"+fila).style.color='#000000';
seleccionado[fila]=false;
}
}
Таким образом, первая функция будет ограничивать количество флажков, которые вы можете выбрать, а вторая изменит цвет фона ячейки после его проверки. HTML-код выглядит примерно так:
<form id="main" name="main" method="POST">
<font face="verdana">
<table>
<tr >
<td id="fila1">FIRST<input name="ckb" onclick="cambia(1)" type="checkbox"/></td>
<td id="fila2">SECOND<input name="ckb" onclick="cambia(2)" type="checkbox"/></td>
<td id="fila3">THIRD<input name="ckb" onclick="cambia(3)" type="checkbox"/></td>
</table>
</font>
</form>
И в конце нужно добавить следующий скрипт:
<script type="text/javascript">
checkboxlimit(document.forms.main.ckb, 1);
</script>
Теперь они работают отлично в одиночку, но когда я их объединяю, работает только тот, который ограничивает количество проверенных ящиков. Есть ли способ заставить их работать вместе?
Проблема в том, что когда вы вызываете checkboxlimit
, он перезаписывает обработчик кликов по этим элементам. То, что вы, вероятно, хотите сделать, это вызвать cambia
из вашей функции, проверяя количество отмеченных ящиков:
function checkboxlimit(checkgroup, limit){
var checkgroup=checkgroup
var limit=limit
for (var i=0; i<checkgroup.length; i++) {
var fila = i + 1;
checkgroup[i].onclick=(function(fila){
return function () {
var checkedcount=0
for (var i=0; i<checkgroup.length; i++)
checkedcount+=(checkgroup[i].checked)? 1 : 0
if (checkedcount>limit){
alert("You can only select a maximum of "+limit+" checkboxes")
this.checked=false
} else {
cambia(fila);
}
}
}(fila));
}
}
Это предполагает, что вы хотите только позвонить в cambia
если проверка действительна. Сценарий: http://jsfiddle.net/ultranaut/HN3Db/.
Также, если это еще не ясно, вы можете удалить атрибуты onclick
в html, поскольку они все равно перезаписываются.
почему вы должны сделать две отдельные функции? Вы можете вызвать только одну функцию и попробовать поставить аргумент.
fila
должен быть установлен во IIFE, чтобы каждый экземпляр не передавал один и тот же параметр. Я отредактировал свой ответ.