Forum Webscript.Ru

Программирование => JavaScript & JScript => Тема начата: Skyer от 04 Марта 2004, 17:32:30

Название: Выделить всё
Отправлено: Skyer от 04 Марта 2004, 17:32:30




...........................
и т.д.

Как сделать чекбокс, при выделении которого выделятся все вышеперечисленные чекбоксы?

Искал в Интернете различные варианты CheckAll(), пробовал, ни один не работает.
Название: Выделить всё
Отправлено: Макс от 04 Марта 2004, 17:45:52
сделай себе ящик на mail.ru и посмотри как там такая фича при удалении писем сделана
Название: Выделить всё
Отправлено: Skyer от 04 Марта 2004, 17:54:19
Макс
Я смотрел не только на mail.ru, но и в других местах Там в поле "name" стоит не массив, а одна и та же переменная, соответственно для оптимизации под себя в их коде что-то надо менять, а я не знаю что. Может быть, их способ передачи данных и более эффективен, но я же не могу посмотреть их php-код.
Название: Выделить всё
Отправлено: Макс от 04 Марта 2004, 19:10:45
Skyer
:) ты думаешь mail.ru на ПХП написан ?
попробуй помечать чекбоксы через масив form.elements
типа
document.form_name.elements[index].checked = true
Название: Выделить всё
Отправлено: Skyer от 04 Марта 2004, 19:12:32
Макс
Приведи полный пример кода, я плохо в этом разбираюсь.
Название: Выделить всё
Отправлено: Макс от 04 Марта 2004, 19:26:29
а волшебное слово ? ;)
Название: Выделить всё
Отправлено: Skyer от 04 Марта 2004, 19:44:37
"В темпе!":)

Пожалуйста:)
Название: Выделить всё
Отправлено: Макс от 04 Марта 2004, 19:47:06








Название: Выделить всё
Отправлено: Skyer от 04 Марта 2004, 20:13:13


Я так понимаю, в таком случае элементы массива "a" будут увеличиваться на 1?

Я неправильно описал:( У меня массив item[] не всегда увеличивается на 1, бывают разные значения.
Название: Выделить всё
Отправлено: Skyer от 04 Марта 2004, 20:17:05
Но вообще подожди, я попробую оптимизировать
Название: Выделить всё
Отправлено: Макс от 04 Марта 2004, 21:37:27
Цитировать
Skyer:
У меня массив item[] не всегда увеличивается на 1, бывают разные значения.
для моего варианта это не имеет значения.
Главное чтобы
 - все чекбоксы в форме располагались по подряд (чтобы между ними не было других элементов формы), хотя это можно обойти.
 - и нужно правильно задать начальный и конечный индексы чекбоксов в массиве elements
Название: Выделить всё
Отправлено: Skyer от 13 Апреля 2004, 02:38:51
Макс
Спасибо! Последний вариант сработал.

И последний вопрос - как сделать так, чтобы при повторном нажатии этой кнопки галочки снимались?
Название: Выделить всё
Отправлено: ThE0ReTiC от 13 Апреля 2004, 09:43:38

function setCheckboxes(the_form, do_check)
{
    var elts      = document.forms[the_form].elements[\'selected_item[]\'];
    var elts_cnt  = (typeof(elts.length) != \'undefined\')
                  ? elts.length
                  : 0;

    if (elts_cnt) {
        for (var i = 0; i < elts_cnt; i++) {
            elts[i].checked = do_check;
        }
    } else {
        elts.checked        = do_check;
    }

    return true;
}
Название: Выделить всё
Отправлено: Skyer от 13 Апреля 2004, 19:44:34
ThE0ReTiC
Я заменил функцию Макса на твою функцию. Не работает. Что ещё нужно сделать?
Название: Выделить всё
Отправлено: ThE0ReTiC от 14 Апреля 2004, 10:03:22
Цитировать
ThE0ReTiC:
\'selected_item[]\'

заменить на имя твоего чекбокса
ну и передать в функцию правилльные значения переменных
И хватит заниматься Copy/Paste
Для этого есть отдельный форум
Название: Выделить всё
Отправлено: Skyer от 01 Мая 2004, 17:08:42
Макс

Вот этот твой вариант:

echo \'


Работал раньше, но теперь у меня между чекбоксами появилась другая форма, и это уже не работает. Ты писал, что можно это обойти - как?
Название: Выделить всё
Отправлено: Макс от 02 Мая 2004, 12:01:25
что значит "другая форма" ? (тег
?)
Скорее всего достаточно просто перенести эту "форму" под чекбоксы
Название: Выделить всё
Отправлено: Макс от 02 Мая 2004, 12:12:26
function select_all(frm, first, last) {
   for(i = first; i <= last; i++) {
      if (frm.elements[i].type == \'checkbox\');
         frm.elements[i].checked = true;
   }
}
Название: Выделить всё
Отправлено: Skyer от 15 Мая 2004, 23:59:33
Макс
Не работает.
Название: Выделить всё
Отправлено: Макс от 16 Мая 2004, 14:02:43
для меня фраза "не работает" не несет никакой информации.
Хочешь получить ответ, описывай что ты делал и что получил и что хотел получить.
Если выводятся ошибки - пиши какие именно
Название: Выделить всё
Отправлено: Skyer от 19 Мая 2004, 20:23:48
ThE0ReTiC
Цитировать
function setCheckboxes(the_form, do_check)
{
    var elts      = document.forms[the_form].elements[\'selected_item[]\'];
    var elts_cnt  = (typeof(elts.length) != \'undefined\')
                  ? elts.length
                  : 0;

    if (elts_cnt) {


the_form, я так понимаю, имя формы. А в do_check что передано должно быть?
Название: Выделить всё
Отправлено: ThE0ReTiC от 20 Мая 2004, 10:05:59
Skyer
ну либо true либо false
=)
Название: Выделить всё
Отправлено: Skyer от 20 Мая 2004, 18:31:46
ThE0ReTiC

Твоя функция:

Цитировать
function setCheckboxes(the_form, do_check)
{
    var elts      = document.forms[the_form].elements[\'delete[]\'];
    var elts_cnt  = (typeof(elts.length) != \'undefined\')
                  ? elts.length
                  : 0;

    if (elts_cnt) {
        for (var i = 0; i < elts_cnt; i++) {
            elts.checked = do_check;
        }
    } else {
        elts.checked        = do_check;
    }

    return true;
}


+



+



Ничего не происходит.
Название: Выделить всё
Отправлено: Skyer от 25 Мая 2004, 18:15:29
Макс
Я только сейчас обратил внимание. В твоей функции

Цитировать
function select_all(frm, first, last) {
   for(i = first; i <= last; i++) {
      frm.elements.checked = true;
   }
}


параметр last определяет количество всех элементов формы. А между чекбоксами есть ещё элементы формы, их количество может быть совершенно различным(как и самих чекбоксов). У меня программа может подсчитать количество чекбоксов, но количество элементов всего - нет.

Ты написал, что
Цитировать
Главное чтобы
- все чекбоксы в форме располагались по подряд (чтобы между ними не было других элементов формы), хотя это можно обойти.


Как это сделать?
Название: Выделить всё
Отправлено: Макс от 25 Мая 2004, 20:35:41
не тестировал, примерно так :

function select_all(frm) {
   last = frm.elements.length;
   for(i = 0; i <= last; i++) {
      if (frm.elements[i].type == \'checkbox\');
         frm.elements[i].checked = true;
   }
}
Название: Выделить всё
Отправлено: Skyer от 25 Мая 2004, 20:46:33
Макс
Спасибо! (смайл большого пальца вверх). Работает.