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

    +153

    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
    function showAddForm(node)
    { 
          if(node.attr('e_control') == 1)
          var strOK = "addProduct(\""+node.attr('e_id')+"\",\""+node.attr('e_control')+"\",\""+node.attr('e_name')+"\",\""+node.attr('e_size')+"\", $(\"#count_product_form\")[0].value, $(\"#control_product_form\")[0].checked, \"" + node.attr('e_code') + "\");";
        else
          var strOK = "addProduct(\""+node.attr('e_id')+"\",\""+node.attr('e_control')+"\",\""+node.attr('e_name')+"\",\""+node.attr('e_size')+"\", $(\"#count_product_form\")[0].value, 0, \"" + node.attr('e_code') + "\");";
      
      $('#product_add_window')[0].innerHTML = "<div style='width:100%;text-align:right;font:10px Tahoma;color:blue;'><a href='#' onclick='$(\"#product_add_window\").hide(); return false;'>закрыть</a></div>";
      $('#product_add_window')[0].innerHTML += "<div style='padding:5px;width:100%'><u>Наименование:</u><span style='padding-left:5px;'>"+node.attr('e_name')+"&nbsp;</span></div>";
      
          $('#product_add_window')[0].innerHTML += "<div style='padding:5px;width:100%'><u>Типоразмер:</u><span style='padding-left:5px;'>"+node.attr('e_size')+"&nbsp;</span></div>";
      
          if(node.attr('e_control') == 1)
          $('#product_add_window')[0].innerHTML += "<div style='padding:5px;width:100%'><u>Ободная лента:</u><span style='padding-left:5px;'><input id='control_product_form' type='checkbox' value='"+node.attr('e_control')+"' checked /></span></div>";
      
        
      $('#product_add_window')[0].innerHTML += "<div style='padding:5px;width:100%'><u>Количество:</u><span style='padding-left:5px;'><input id='count_product_form' type='text' value='' checked style='background-color:#f6f6f7; border:1px solid #455064;' onkeydown='if(event.keyCode==13) {sstop=true; $(\"#focusOK\")[0].onclick();} event.stopPropagation ? event.stopPropagation() : (event.cancelBubble=true);' onkeyup='this.value = this.value.replace(/[^0-9]/g,\"\");' onclick='event.stopPropagation ? event.stopPropagation() : (event.cancelBubble=true);' />&nbsp;</span></div>";
    
      $('#product_add_window')[0].innerHTML += "<div style='padding-top:5px;text-align:right'><input type='button' value='ok' id='focusOK' style='width:50px;height:20px;font-size:11px;' size=5 onclick='"+strOK+"$(\"#product_add_window\").hide();'>&nbsp;<input type='button' value='Отмена' style='width:70px;height:20px;font-size:11px;' onclick='$(\"#product_add_window\").hide();event.stopPropagation ? event.stopPropagation() : (event.cancelBubble=true);'></div>";
    	  
      $('#product_add_window').show();
      setTimeout("$('#count_product_form')[0].focus();",200);
      
    }

    Запостил: clauclauclau, 26 Июля 2013

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

    • Почему innerHTML, а не html()?
      Ответить
      • html() перезаписывает содержимое. Автору пришлось бы писать:
        $($('#product_add_window')[0]).html($($('#product_add_window')[0]).html() + "<div>..........</div>");

        Мягко говоря, непонятно.
        Ответить
        • А зачем, когда есть append()?
          $('#product_add_window').append('<div>...</div>');

          И да, [0] не нужен: он понадобился только для того, чтобы объект jQuery (который в данном случае является массивом, пусть и из одного элемента) конвертировать в объект DOM.

          Если же нужно ограничить количество элементов, то у jQuery есть метод first(), но я сомневаюсь, что на одной странице может быть несколько элементов с одним айдишником.

          А в данной задаче можно выкинуть jQuery совсем, ведь есть же document.getElementById.
          Ответить
          • Я всё это знаю. Просто ответил на вопрос, дописав код с стиле автора.
            Ответить
            • И получилось великолепно: так здорово смотрятся пачки долларов!
              Ответить
    • Добавлю:
      1. Копипаста. У кого хватило терпения дочитать и понять, чем отличаются строки 04 и 06?
      2. style='padding:5px;width:100%', хотя можно было бы завести под это дело класс.
      3. Есть сомнения в полезности 22-й строки. Вдруг юзер за 200 миллисекунд успеет таки выбрать нужный элемент?
      4. Я не уверен, что указание атрибута onclick вместо навешивания обработчика через $.click(function) — это то, что нужно.
      Ответить
      • 5. Надо было сначала сформировать строку и только в конце один раз вставлять её через html().

        Поясните, пожалуйста, пункт 4. В данном случае есть какая-то принципиальная разница, учитывая стиль автора «вставить всё, что нужно (html, css, javascript), одним куском кода»? Я имею в виду быстродействие, утечки памяти в старых браузерах или что-либо подобное. Кроме того, $.click(function) подразумевает, что нам сначала нужно найти элемент, для которого будет вызываться обработчик, а это лишние действия.
        Ответить
        • 6. printf в яваскрипте есть? Или хотя бы одинарные кавычки? Без подсветки читать этот пиздец с экранированными кавычками невозможно.
          Ответить
          • Даже из этого фрагмента видно, что одинарные кавычки есть.

            А вообще весь этот треш и угар можно было поместить в блок с атрибутом style="display:none". Полагаю, что код страницы распух бы не сильно, зато функция свелась бы к $('#product_add_window').show(); и к замене нескольких атрибутов элемента. Но вполне возможно, что по каким-то причинам так удобнее (например, код этого блока полностью переписывается разными функциями). Правда, даже в этом случае можно было бы отделить CSS и JS от HTML...
            Ответить
        • Точно! Ради IE6 придётся всё оставить через onclick=...

          Что же касается времени поиска, то поиск через document.getElementById вряд ли будет добавлять больше времени, чем разбор этих всех onclick=...
          Ответить
      • > У кого хватило терпения дочитать и понять, чем отличаются строки 04 и 06
        Длиной ;)
        Ответить
      • >1. Копипаста. У кого хватило терпения дочитать и понять, чем отличаются строки 04 и 06?
        Вот это меня тоже, блядь, бесит, и вовсе не только в жаваскрипте.

        Еще похоже было в питоне i = 10000000000000000000000000. Посчитайте-ка, не трогая клавиатуру и мышь, сколько тут нулей (чел просто не знал про int(1e15))?
        Ответить

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