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

    +157

    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
    $(document).click(function (e) {
        if ($(e.target).parents().filter('#idAddItTopPopUpMenu:visible').length != 1) {
            $('#idAddItTopPopUpMenu').hide();
        }
        if ($(e.target).parents().filter('#idAddItProductDetailPopUpMenu:visible').length != 1) {
            $('#idAddItProductDetailPopUpMenu').hide();
        }
        if ($(e.target).parents().filter('#idPampItProductDetailPopUpMenu:visible').length != 1) {
            $('#idPampItProductDetailPopUpMenu').hide();
        }
        if ($(e.target).parents().filter('#idPrivacyProductPopUpMenu:visible').length != 1) {
            $('#idPrivacyProductPopUpMenu').hide();
        }
        if ($(e.target).parents().filter('#idSocialNetworkMenu:visible').length != 1) {
            $('#idSocialNetworkMenu').hide();
        }
        if ($(e.target).parents().filter('#idPampItTopPopUpMenu:visible').length != 1) {
            $('#idPampItTopPopUpMenu').hide();
        }
    . . .
        if ($(e.target).parents().filter('div[id=idAreaLastMessage]:visible').length != 1 && $(e.target).parents().filter('div[id=idbtnMessages]').length != 1) {
            $('div[id=idListLastMessage]').hide();
        }
        if ($(e.target).parents().filter('div[id=idAreaLastAlert]:visible').length != 1 && $(e.target).parents().filter('div[id=idbtnAlert]').length != 1) {
            $('div[id=idListLastAlert]').hide();
        }
        if ($(e.target).parents().filter('div[id=idAreaNearestCalendar]:visible').length != 1 && $(e.target).parents().filter('div[id=idbtnNearestCalendar]').length != 1) {
            $('div[id=idListNearestCalendar]').hide();
        }
    });

    нет слов o_O

    Запостил: DarkThinker, 14 Мая 2012

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

    • Где такой шлак работает.
      parents() вынес остатки моего разума, собираем всю родительскую цепочку ради того чтобы выяснить нажали мы вне popup и скрыть его.
      Можно создать фоновый див, который будет лежать под всеми окнами и ловить на себя клик, попутно скрывая все элементы с классом .popupBlock, который мы пропишем всем окнам.
      Ответить
      • И эта родительская цепочка собирается больше 10 раз, при каждом клике в любом месте страницы
        Ответить
        • и вся эта поебень господня только затем, чтобы проверить видимость элементов
          Ответить
    • Похоже, тут проверка, что если "кликнутый" элемент вне всплывающего окна, то закрыть это окно. Можно было сделать так: событие "e" содержит координаты клика (x,y), а вычислить левый верхний и нижний правый углы окна (слоя) легче легкого. Далее элементарной математикой узнаем, был ли клик вне окна, и если да, то закрываем его (прячем). Делать это, конечно, нужно только для видимых окон. Примерно такая структура:

      var winds=$("#win1,#win2,...");
      $(document).click(function (e) {
      var click={x: e.pageX, y: e.pageY}
      winds.each(function(){
      var bounds=getBounds(this);
      if (!isInside(click, bounds))
      $(this).hide();
      })
      }
      Ответить
    • заебись вода ;)
      Ответить

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