Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.09.2014, 14:27
Аспирант
Отправить личное сообщение для rusbody Посмотреть профиль Найти все сообщения от rusbody
 
Регистрация: 18.02.2011
Сообщений: 51

как сократить код?
Есть три одинаковых куска с разными селекторами class

$('.epl').click(function (e) {
var $message = $('.eplin');
if ($message.css('display') != 'block') {
$message.show();
var yourClick = true;
$(document).bind('click.myEvent', function (e) {
if (!yourClick && $(e.target).closest('#demo-text').length == 0) {
$message.hide(); $('.mypin').hide();$('.attain').hide();
$(document).unbind('click.myEvent');
}
yourClick = false;
});
}
e.preventDefault();
});

$('.myp').click(function (e) {
var $message = $('.mypin');
if ($message.css('display') != 'block') {
$message.show();
var yourClick = true;
$(document).bind('click.myEvent', function (e) {
if (!yourClick && $(e.target).closest('#demo-text').length == 0) {
$message.hide();$('.eplin').hide();$('.attain').hide();
$(document).unbind('click.myEvent');
}
yourClick = false;
});
}
e.preventDefault();
});

$('.atta').click(function (e) {
var $message = $('.attain');
if ($message.css('display') != 'block') {
$message.show();
var yourClick = true;
$(document).bind('click.myEvent', function (e) {
if (!yourClick && $(e.target).closest('#demo-text').length == 0) {
$message.hide();$('.eplin').hide();$('.mypin').hide();
$(document).unbind('click.myEvent');
}
yourClick = false;
});
}
e.preventDefault();
});

Как бы их в один объединить?

Последний раз редактировалось rusbody, 16.09.2014 в 14:40.
Ответить с цитированием
  #2 (permalink)  
Старый 16.09.2014, 14:33
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Сообщение от rusbody
Как бы их в один объединить?
Дык!

$('.epl, .myp, .atta').click();
Ответить с цитированием
  #3 (permalink)  
Старый 16.09.2014, 14:37
Аспирант
Отправить личное сообщение для rusbody Посмотреть профиль Найти все сообщения от rusbody
 
Регистрация: 18.02.2011
Сообщений: 51

Там внутри ещё есть var $message = $('.attain');

Тот же класс, только приставка in, красным выделены различия
Ответить с цитированием
  #4 (permalink)  
Старый 16.09.2014, 14:41
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

$('.eplin').hide();
$("." + this.className + "in").hide();


Если классов у эелемента много то можно сделать например атрибут data-class, который будет с приставкой in
Ответить с цитированием
  #5 (permalink)  
Старый 16.09.2014, 14:42
Аспирант
Отправить личное сообщение для rusbody Посмотреть профиль Найти все сообщения от rusbody
 
Регистрация: 18.02.2011
Сообщений: 51

спасибо мужики!!!

$('.epl, .myp, .atta').click(function (e) {
      var $message = $("." + this.className + "in"); 
      if ($message.css('display') != 'block') {
        $message.show(); 
        var yourClick = true;
        $(document).bind('click.myEvent', function (e) {
          if (!yourClick && $(e.target).closest('#demo-text').length == 0) {
            $message.hide(); 		
            $(document).unbind('click.myEvent');
          }
          yourClick = false;
        });
      } 
      e.preventDefault();
    });

Последний раз редактировалось rusbody, 16.09.2014 в 15:02.
Ответить с цитированием
  #6 (permalink)  
Старый 16.09.2014, 14:49
Аспирант
Отправить личное сообщение для rusbody Посмотреть профиль Найти все сообщения от rusbody
 
Регистрация: 18.02.2011
Сообщений: 51

А можно сократить скрытие? вот это:

if (this.className == "epl") { $('.mypin').hide();$('.attain').hide(); }
if (this.className == "myp") { $('.eplin').hide();$('.attain').hide(); }
if (this.className == "atta") { $('.eplin').hide();$('.mypin').hide(); }


- UP это вообще все надо удалить

Последний раз редактировалось rusbody, 16.09.2014 в 15:03.
Ответить с цитированием
  #7 (permalink)  
Старый 16.09.2014, 14:55
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Я так понимаю что у вас есть какой-то список, и только 1 его элемент может быть виден на экране. Это делается вообще не так. Вы делаете стилями их все невидимыми и добавляете класс "active" одному из них (а с классом "active" - он видимый). Тогда все что вам надо сделать при клике по другому пункту - найти актив и убрать ему класс и тому на который кликнули - добавить. Даже если у вас не список - судя по тому что вы хотите этот алгоритм тут применим.
Ответить с цитированием
  #8 (permalink)  
Старый 16.09.2014, 15:01
Аспирант
Отправить личное сообщение для rusbody Посмотреть профиль Найти все сообщения от rusbody
 
Регистрация: 18.02.2011
Сообщений: 51

спасибо, тупанул
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сократить код в 2 раза mr__brainwash jQuery 6 03.09.2014 17:52
Объясните как работает код wolf_ Ваши сайты и скрипты 0 06.08.2014 23:24
Как вызвать свою функцию из «чужого» кода в Java Script, не переписывая «чужой» код? korobochkin Библиотеки/Тулкиты/Фреймворки 2 19.07.2014 16:17
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
javascript обфускатор или как правильно скрыть код syegorius Общие вопросы Javascript 1 19.09.2012 02:58