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

    +166.2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    <form	name='change_form'
    enctype='multipart/form-data'
    method='post'
    onSubmit='if (!checkfilled(document.change_form,"name")) return false;
    if (!checkfilled(document.change_form,"email")) return false;
    if (!checkfilled(document.change_form,"text")) return false;
    if (!checkfilled(document.change_form,"company")) return false;
    if (!checkfilled(document.change_form,"phone")) return false;
    if (!checkint(document.change_form,"city_code", -2147483648, 2147483648)) return false;
    '
    action='/request/?do=add'>

    Гениальное решение для проверки html-формы.

    Запостил: wwwguru, 01 Марта 2010

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

    • Check-ch-check-check-check-ch-check it out
      What-wha-what-what-what's it all about
      Work-wa-work-work-work-wa-work it out
      Let's turn this motherfuckin' party out (c) BeastieBoys
      Ответить
    • Поясните для нубов, пожалуйста.
      Ответить
      • Во-первых, как правило, в атрибуты HTML-тегов, содержащие обработчики событий, не помещают большого количества JavaScript-кода. Напротив, типовым решением является помещение в значение атрибута вызова функции, определённой в другом месте (чаще всего во внешнем подключаемом JS-файле). Такой подход позволяет править скрипты, не изменяя HTML-код страницы.
        Во-вторых, реализация проверки формы, представленная здесь, также далека от оптимальной. Рациональнее было обойтись одной проверкой, в которой объединить все условия по логическому И.
        Обобщая вышесказанное:
        HTML:
        <form name='change_form' enctype='multipart/form-data' method='post' onSubmit='return checkThisOut(this)' action='/request/?do=add'>

        JS:
        /* Код неоптимален, т.к. нацелен на максимальную совместимость с авторским */
        function checkThisOut()
        {
          var
            lst = ["name", "email", "text", "company", "phone"],
            dcf = document.change_form;
          
          for (j = lst.length, i = 0; i < j; ++i)
          {
            if (!checkfilled(dcf, lst[i]))
            {
              return false;
            }
          }
          
          return checkint(document.change_form,"city_code", -2147483648, 2147483648);
        }

        Благодарю К.О. за неоценимую помощь в написании поста.
        Ответить
        • > Семь раз отмерь — один отрежь, guest!
          Да, в тему. Быстросамофиксы:
          1) в HTML должно быть return checkThisOut()
          2) в JS я-таки решил обойтись без if(...&&...&&...) и сделал цикл, ибо выходило много копипасты.
          Ответить
      • Можно выделить:
        1) 6 шт. return false вместо одного.
        2) Неправильная запись if'ов
        3) Проверка кода города в 32-битном диапазоне signed int - это мега ппц
        4) Возможно что-то ещё )
        Всю проверку можно выполнить в одном цикле с одним return false.
        Ответить

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