PDA

Просмотр полной версии : Checkbox и TextField - активность\не активность...


x2com
26.01.2006, 05:08
У меня из БД в html строются определённые строки с информацией и в каждий строке есть один чекбокс(для отбора строк-записей) и одно текстовое поле (для указания количества выбраных записей). Задача сделать так, чтоб можно было выбрать, например, только 3 чекбокса. Вабирает человек максимум 3 позиции и чекбоксы и текстфилды не относящиеся к выбраным строкам становятся не активными (disabled).
Парился я, парился с этим, что-то мало чего выходит. Может быть у кого-то есть идеи как конкретно реализовать задуманное.
Заранее благодарен!

Skubent
26.01.2006, 11:56
Вешаешь на onclick ко всем чекбоксам обработчик, который проверяет количество зачеканых полей и отключает остальные.

function GetCount() {
var retvalue = 0;
tempColl = document.getElementsByTagName("input");
for (i=0; i<tempColl.length; i++) {
if ((tempColl[i].type == "checkbox")&&(tempColl[i].checked)) retvalue = retvalue + 1;
}
if (retvalue >= 3) DisableInactive();
}

function DisableInactive() {
tempColl = document.getElementsByTagName("input");
for (i=0; i<tempColl.length; i++) {
if ((tempColl[i].type == "checkbox")&&(!tempColl[i].checked)) tempColl[i].disabled = true;
}

}

x2com
26.01.2006, 17:11
Спасибо, вроде работает, только немного не так как хотелось. А как сделать, чтобы этой функции подчинялись чекбоксы определённого имени. Например где name='choose[x]' ? У меня просто две разных группы записей с чекбоксами и надо, чтоб эта функция работала отдельно для каждой группы.

Skubent
26.01.2006, 17:47
Подумать и использовать в проверке не type, а name.

x2com
26.01.2006, 18:52
Я, конечно, извиняюсь. Я плохо в JS разбираюсь, из предложенного кода получилось:

function GetCount(num) {
var retvalue = 0;
tempColl = document.getElementsByTagName('input');
for (i=0; i<tempColl.length; i++) {
if ((tempColl[i].name == "rdv_choose")&&(tempColl[i].checked)) retvalue = retvalue + 1; }
if (retvalue >= num) { DisableInactive(); }else EnableInactive();
}

function DisableInactive() {
tempColl = document.getElementsByTagName('input');
for (i=0; i<tempColl.length; i++) {
if ((tempColl[i].name == "rdv_choose")&&(!tempColl[i].checked))
{ tempColl[i].disabled = true; }
}
}
function EnableInactive() {
tempColl = document.getElementsByTagName('input');
for (i=0; i<tempColl.length; i++) {
if ((tempColl[i].name == "rdv_choose")&&(!tempColl[i].checked)) tempColl[i].disabled = false;
}
}

При этом функция пререстаёт работать, а если "tempColl[i].name" заменить обратно на "tempColl[i].type" начинает работать. Так что замена type на name у меня не прокатило.

P.S.- "rdv_choose" - массив с поочерёдными числовыми ключами.