Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.03.2017, 15:50
Кандидат Javascript-наук
Отправить личное сообщение для AlexTrader Посмотреть профиль Найти все сообщения от AlexTrader
 
Регистрация: 23.12.2016
Сообщений: 121

Компактно переписать функцию
Здравствуйте форумчане! Подскажите пожалуйста, как более компактно можно переписать функцию:
$(document).mouseup(function (e) { 
            var div = $("#treeview");
            var div1 = $("#CategoryTitle"); 
            var div2 = $("#treeviewDropdownBtn"); 
            if (!div.is(e.target) && div.has(e.target).length === 0) {
                if (!div1.is(e.target) && div1.has(e.target).length === 0) {
                    if (!div2.is(e.target) && div2.has(e.target).length === 0) {
                        kendoWindow.data("kendoWindow").close();
                    }
                }
            }
        });
Ответить с цитированием
  #2 (permalink)  
Старый 06.03.2017, 15:51
Кандидат Javascript-наук
Отправить личное сообщение для AlexTrader Посмотреть профиль Найти все сообщения от AlexTrader
 
Регистрация: 23.12.2016
Сообщений: 121

Функция делает следующее: если был клик не по указанным дивам, то окно закрывается
Ответить с цитированием
  #3 (permalink)  
Старый 06.03.2017, 15:56
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от AlexTrader
если был клик не по указанным дивам, то окно закрывается
Как вариант...
$(document).mouseup(function (e) { 
	var div = $("#treeview, #CategoryTitle, #treeviewDropdownBtn"); 
	if (!div.is(e.target) && div.has(e.target).length === 0) {
		kendoWindow.data("kendoWindow").close();
	};
});
Ответить с цитированием
  #4 (permalink)  
Старый 06.03.2017, 15:57
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от AlexTrader
Подскажите пожалуйста, как более компактно можно переписать функцию
Если этим элементам дать уникальный класс - селектор будет еще короче...
Ответить с цитированием
  #5 (permalink)  
Старый 06.03.2017, 17:25
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от ksa
элементам дать уникальный класс
Как это?
Ответить с цитированием
  #6 (permalink)  
Старый 06.03.2017, 17:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

AlexTrader,
$(function() {
    $("document").on("click", function(e) {
        $(e.target).closest("#treeview, #CategoryTitle, #treeviewDropdownBtn").length
        || kendoWindow.data("kendoWindow").close()
    })
});
Ответить с цитированием
  #7 (permalink)  
Старый 06.03.2017, 17:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от laimas
Как это?
было
var div = $("#treeview, #CategoryTitle, #treeviewDropdownBtn");

стало
var div = $(".noClose");

Ответить с цитированием
  #8 (permalink)  
Старый 06.03.2017, 18:03
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от рони
стало
var div = $(".noClose");
Ну это понятно, но какое отношение имя класса имеет к уникальности, если оно не может быть уникальным?

Если поиск по классу, то будут обшарены все элементы, а не только первый попавшийся в случае с ID. Поэтому при поисках по классу либо уточняют что ищут, либо указывают контекст. Вот я и спросил, как такое возможно - упростить и выгадать?
Ответить с цитированием
  #9 (permalink)  
Старый 06.03.2017, 18:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

laimas,
не понимаю о чём вы.
Ответить с цитированием
  #10 (permalink)  
Старый 06.03.2017, 18:20
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от ksa
Если этим элементам дать уникальный класс - селектор будет еще короче...
Да, селектор будет короче. Но имя класса для браузера не является уникальным значением, и при поиске по имени класса он будет проверять все, без исключения, элементы документа. Можно не обременять его поиском среди всех, а только, например среди параграфов - p.class-name.

Другими словами, вряд ли можно быть уверенным в том, что заменив селектор "#treeview, #CategoryTitle, #treeviewDropdownBtn" на ".noClose" мы выиграем.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расширение для Safari. Как вызвать функцию из popover в global page? housewm Opera, Safari и др. 0 21.12.2013 06:07
Помогите подключить функцию в onclick moloko Элементы интерфейса 10 30.07.2013 08:27
передать анонимную функцию, вызывающую другую функцию с нужными параметрами Ваяс Общие вопросы Javascript 5 21.02.2013 20:12
Выполнить функцию заранее неизвестную Neokortex jQuery 2 13.02.2012 12:41
Через argument.callee не получается переписать функцию. Jurasmi Общие вопросы Javascript 2 23.03.2011 12:54