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

    +152

    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
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    function Order(obj) {
      var frm = $(obj);
      var first_name = frm.find("input[name='first_name']").val();
      var last_name = frm.find("input[name='last_name']").val();
      var email = frm.find("input[name='email']").val();
      var phone = frm.find("input[name='phone']").val();
      var text = frm.find(".coment-form-textarea").val();
      var captcha = frm.find("input[name='captcha']").val();
    
      var valid = true;
      MsgErrorDestroy(frm, '#order-first_name', 'input[name="first_name"]');
      MsgErrorDestroy(frm, '#order-last_name', 'input[name="last_name"]');
      MsgErrorDestroy(frm, '#order-email', 'input[name="email"]');
      MsgErrorDestroy(frm, '#order-phone', 'input[name="phone"]');
      MsgErrorDestroy(frm, '#order-text', '.coment-form-textarea');
    
      if (first_name == '') {
        MsgError(frm, 'Введите ваше имя.', '#order-first_name', 'input[name="first_name"]');
        valid = false;
      }
      if (last_name == '') {
        MsgError(frm, 'Введите вашу фамилию.', '#order-last_name', 'input[name="last_name"]');
        valid = false;
      }
      if (!emailValid(email)) {
        MsgError(frm, 'Введите ваш email.', '#order-email', 'input[name="email"]');
        valid = false;
      }
      if (phone == '') {
        MsgError(frm, 'Введите ваш номер телефона.', '#order-phone', 'input[name="phone"]');
        valid = false;
      }
      if (text == '') {
        MsgError(frm, 'Введите ваше сообщение.', '#order-text', '.coment-form-textarea');
        valid = false;
      }
      if (captcha == '') {
        MsgError(frm, 'Введите капчу.', '#comment-capcha', 'input[name="captcha"]');
        valid = false;
      }
      if (valid == false) {
        return false;
      }
    }
    
    function MsgError(frm, msg, select_msg, select_input) {
      if (select_msg != 0) {frm.find(select_msg).html(msg);}
      if (select_input != 0) {frm.find(select_input).addClass('input-error');}
      if (select_msg != 0) {frm.find(select_msg).removeClass('hide');}
      //frm.find('#'+'profile-'+key).addClass('show');
    }
    function MsgErrorDestroy(frm, select_msg, select_input) {
      if (select_msg != 0) {frm.find(select_msg).html('');}
      if (select_input != 0) {frm.find(select_input).removeClass('input-error');}
      if (select_msg != 0) {frm.find(select_msg).removeClass('show');}
      //$('#'+'profile-'+key).addClass('hide');
    }

    Валидация какого-то там заказа. Автор вероятно не слышал про массивы и объекты.

    Запостил: baldrs, 17 Июня 2013

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

    • и никакого новомодного агулара, бакбони. Все так тепло, лампово.
      Ответить
    • Введите вашу капчу.
      Ответить
      • > вашу капчу
        больше не надо тратить ресурсы сервера на генерацию капчи
        Ответить
        • Отличная идея: показываем пользователю цифры, просим нарисовать из них капчу. На сервере распознаем капчу.
          Ответить
          • Если капча не распознается сервером, но админ все-таки может прочесть ее, капча считается введенной удачно.
            Ответить
            • Если админ прочитал капчу, а сервер не смог - админ генерит страницу сам.
              Ответить
            • Такая схема вполне может работать для регистрации на ресурсах, где учетные записи активируются админом.
              Ответить
              • Вероятно, это подходит для сайта художников. Красиво нарисовал, показал живость красок, авторский стиль - получи учётку.
                Хотя, если просить сфотографироваться на фоне капчи, написаннной на бумаге... Впрочем, это уже алгоритм TITS OR GTFO!
                Ответить
                • > Впрочем, это уже алгоритм TITS OR GTFO!
                  Тоже вполне имеет право на жизнь ;)
                  Ответить
      • Ошибка. Пользователь с такой капчей уже зарегистрирован.
        Ответить
    • Поправьте меня, если я что-то упустил:
      1) Имя функции с большой буквы (это ведь не конструктор, нафига?)
      2) Переменная с непонятным именем frm
      3) Повсеместное использование метода find для поиска элементов, когда уместнее передавать контекст вторым аргументом в селектор.
      4) Многократное использование var (объявлять переменные нужно через запятую)
      5) Многократное повторение одних и тех же действий с разными параметрами
      6) if (first_name == '') лучше if(!first_name), а еще лучше вообще все переписать
      7) removeClass('hide'); тут видимо должно быть просто hide()
      8) removeClass('show'); а тут show()
      Ответить
      • > Многократное использование var (объявлять переменные нужно через запятую)
        Нахрена? Имхо, в данном случае (с достаточно длинной инициализацией), var в каждой строке смотрится логичнее.
        Ответить
      • У моего бывшего сотрудника было свое понимания термина "программирование" и js в частности
        Ответить
        • мне прям интересно. Когда его брали на работу как он прошел собеседования.
          Щас будет не много скучно расскажу из личного опыта.
          Когда я устраивался меня расспрашивали о высоких материях типа паттернов, о том как реализовать MVC на js, на пыхе. О том в каких случаях следует использовать шаблон фабрика а в каких фабричный метод.

          Так вот на практике 90% знаний для выполнения моих функций просто не к чему. Вполне достаточно понимать MVC и иметь навык не лепить толстые контролеры.
          Ответить
          • У него были проекты с хорошим дизайном. Рабочие. Потом оказалось, что он сайт-визитку неделю делает на CI. Он всем замылил глаза.
            Ответить
            • Прикольно. Оценивать программиста по Дизайну.
              В отдел маркетинга. Талант не должен пропадать.
              Ответить
              • Не знаю, на самом деле. Меня взяли позже, и ни на один из сайтов в резюме не смотрели, ни о их дизайне не говорили. А коммент про "хороший дизайн" это цитата с его слов.
                Ответить
                • Спасибо за разъяснения. Мне просто интересно именно случаи берут на работу и собеседования проводят вроде не глупые и подкованные люди, а потом через пол года просят работника уйти, ибо всё ,что он делает надо переделывать.
                  Ответить
      • Раз уж вы высказали своё ИМХО, то и я выскажу.
        1) Существуют разные стили именования, и тут использован(О, УЖАС!!!) один из них.
        2) Легко догадаться, что frm - form(не from же, очевидно). Опять - же, именование переменных - личное дело автора.
        4) Можно != нужно. Впрочем, тут я с вами согласен.
        5) Ваши предложения?
        7) быть может, у автора своя реализация removeClass?
        8) см. выше
        Ответить
        • > 5) Ваши предложения?
          Объект + цикл?
          > 7) быть может, у автора своя реализация removeClass?
          Нет там в html конструкции вида
          <div class='comment-error hide'>{text]</div>
          Ответить
          • > > 5) Ваши предложения?
            > Объект + цикл?
            а можно и без цикла: $.each + замыкание
            Ответить
      • 3) второй аргумент можно было не всегда
        4) уже ответили - разницы нет
        7 и 8) не угадал, может я не хочу изменять множество CSS-свойств (а .hide() и .show() меняет width, height, opacity, visibility) целевого объекта. Я пропишу так:

        .hide {
        display: none;
        }

        и все.
        Ответить
        • Причем я не буду заботится о том какое значение стояло там ранее: block, inline-block, table-cell, table, etc.. оно при удалении класса hide "восстановит" его корректно обратно.
          Ответить

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