1. JavaScript / Говнокод #2405

    +151.2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    $('#state_checkboxes input[type=checkbox]').each(function(i) {
        $(this).click(function() {
            if (!$(this).attr('checked')) {
                if ($('#state_checkboxes input[type=checkbox]:checked').length == 0) {
                    $('#state_checkboxes input[type=checkbox]').not(this).attr('checked', 'checked');
                }
            }
        });
    });
    
    $('#type_checkboxes input[type=checkbox]').each(function(i) {
        $(this).click(function() {
            if (!$(this).attr('checked')) {
                if ($('#type_checkboxes input[type=checkbox]:checked').length == 0) {
                    $('#type_checkboxes input[type=checkbox]').not(this).attr('checked', 'checked');
                }
            }
        });
    });
    
    $('#own_checkboxes input[type=checkbox]').each(function(i) {
        $(this).click(function() {
            if (!$(this).attr('checked')) {
                if ($('#own_checkboxes input[type=checkbox]:checked').length == 0) {
                    $('#own_checkboxes input[type=checkbox]').not(this).attr('checked', 'checked');
                }
            }
        });
    });

    Только что наговнокодил, еще тепленькое.
    Суть в следующем: есть несколько пар чекбоксов, в каждой из этих пар обязательно должен быть выделен хотя бы один. Если снимаем выделение со всех чекбоксов в паре, то установиться выделение должно у другого чекбокса.
    В данном говнокоде 3 пары чекбоксов, у меня в проекте их будет больше, вот сижу и думаю, как бы это всё покрасивее сделать, а то совсем уже

    Запостил: striker, 14 Января 2010

    Комментарии (20) RSS

    • есть еще идея сделать говнофункцию и повесить её на onclick, типа
      <input type="checkbox" id="checkbox1" onclick="checkCheckboxes('checkbox1', 'checkbox2');" />
      <input type="checkbox" id="checkbox2" onclick="checkCheckboxes('checkbox2', 'checkbox1');" />


      Еще идеи?
      Ответить
      • А radio не получится использовать?
        Ответить
        • получится, только тогда придется делать три радиобаттона, вместо двух чекбоксов. Улавливаете? :)
          Ответить
          • Зато юзер не будет путаться. Тёма бы за такие изобретения тебя избил бы фалоимитатором и был бы прав. Делай радиобатонами.
            Ответить
            • тема не пуп земли
              хотя иногда выдает вменяемую идею
              Ответить
            • а чоб юзер путался? там по логике как бы получается всё ясненько. Хотя Тёма бы не оценил, это правда
              Ответить
          • пора в хтмл вводить радиочекбокс... чтобы можно было отмечать несколько, но убрать со всех отметки не давало бы... надо в в3ц послать просьбу пускай в стандарт добавлють :)
            Ответить
    • А не является-ли использование onclick деянием, наказумым отрыванием конечностей?
      Ответить
    • $('.group').each(function() {
          var chkboxes = $(':checkbox', this).click(function() {
              // правильно расставить галочки в коллекции chkboxes
          })
      })

      Где .group - контейнер для взаимосвязанных чекбоксов, а также используется замыкание для их хранения в chkboxes.
      Ответить
      • Прошу Вас, не используйте выборку по классу без указания тега.
        Ответить
        • перформанс?
          Ответить
        • why not?
          с указанием тега лучше будет работать? почему?
          Ответить
          • Быстрее. Сначала выберутся все тэги, потом в них будет искаться указанный класс. В противном случае будет искаться по всему коду. И хтмл, и боди, и мета... Ну вы поняли.
            Ответить
        • Код показывает лишь принцип работы. Но если так уж сильно волнует производительность, то лучше вообще использовать конструкцию $('#id').children().
          Ответить
      • Спасибо!
        $('div.group_checkboxes').each(function() {
                    var chkboxes = $(':checkbox', this).click(function () {
                        if (!$(this).attr('checked') && chkboxes.filter(':checked').length == 0) {
                            chkboxes.not(this).attr('checked', 'checked');
                        }
                    });
                });
        Ответить
        • Правда он тогда выделяет все чекбоксы, кроме последнего выделенного. Но это уже лечится легко
          Ответить

    Добавить комментарий