Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 28.12.2012, 00:15
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Shitbox2
Просто не умею делать так, чтобы его можно было запускать на сайте (как в ваших примерах).
[HTML run] тут код[/HTML]
Сообщение от Shitbox2
Рони не указал добавление элементов.
Он его просто не удаляет - если элемент последний - а так код полный и логика та же, что и у меня в моём примере

Последний раз редактировалось Deff, 28.12.2012 в 00:30.
Ответить с цитированием
  #12 (permalink)  
Старый 28.12.2012, 01:07
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Эх. Обнаружил и у себя косяк, поэтому пришлось одну строчку добавить, так что мой код не короче. Вот работающий пример. Он показывает ошибки без дубликатов + продляет таймер. Собственно, по этим вопросам и тереблю форум целый день
<script src="http://code.jquery.com/jquery-latest.js"></script>
<button onclick="showErrors(['Ошибка 1'])">Ошибка 1</button>
<button onclick="showErrors(['Ошибка 1','Ошибка 2'])">Ошибка 1, Ошибка 2</button>
<button onclick="showErrors(['Ошибка 2','Ошибка 3'])">Ошибка 2, Ошибка 3</button>
<div id="cont"></div>
<script>
function showErrors(errors) {
    if (!$('#elem').length) {
        var $elem = $('<div id="elem"></div>').appendTo('#cont').each( function () {
            //Устанавливаем задержку перед удалением или продлеваем старую, если она была
            var el = $(this)
            el.data('reload', function () {
                clearTimeout(el.data('timer'))
                el.data('timer', setTimeout((function (elem) {
                    return function () { elem.remove() }
                })(el), 5000))
                return el
            })
            return this
        }).data('reload')()
    } else {
        var $elem = $('#elem').eq(0).data('reload')()
        //Удаляем дубликаты            
        $elem.find('span').each(function () { 
            var errDel = $.inArray(this.innerHTML, errors)
            if (errDel > -1) errors.splice(errDel,1)
        })
    }
    for (var i in errors) { $elem.append('<span>' + errors[i] + '</span>. ') }
}
</script>

Последний раз редактировалось Shitbox2, 28.12.2012 в 01:15.
Ответить с цитированием
  #13 (permalink)  
Старый 28.12.2012, 02:34
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

<script src="http://code.jquery.com/jquery-latest.js"></script> 
<button onclick="showErr(this)">Ошибка 1</button>
<button onclick="showErr(this)">Ошибка 1, Ошибка 2</button>
<button onclick="showErr(this)">Ошибка 2, Ошибка 3</button>
<div id="cont"></div>
<script>

(function () {
 var Isx='<span>&. </span>',TimerId_00,OBJ={};
  return showErr = function (a) {
	errors=$(a).html().split(/,\s*/i);
	for (var i in errors) {OBJ[errors[i]]=Isx.replace('&',errors[i]);}
	clearTimeout(TimerId_00);TimerId_00=setTimeout(function(){OBJ={};$("#cont").html('')}, 5000);
	$("#cont").html('');
	for (var key in OBJ) {$("#cont").append(OBJ[key]);}
  }
}())
</script>


<script src="http://code.jquery.com/jquery-latest.js"></script>
<div id="but-wrp">
	<button>Ошибка 1</button>
	<button>Ошибка 1, Ошибка 2</button>
	<button>Ошибка 2, Ошибка 3</button>
</div>
<div id="cont"></div>

<script>
 (function () {
  var Isx='<span>&. </span>',TimerId_00,OBJ={};
  $("#but-wrp button").click(function () {
	errors=$(this).html().split(/,\s*/i);
	for (var i in errors) {OBJ[errors[i]]=Isx.replace('&',errors[i]);}
	clearTimeout(TimerId_00);TimerId_00=setTimeout(function(){OBJ={};$("#cont").html('')}, 5000);
	$("#cont").html('');
	for (var key in OBJ) {$("#cont").append(OBJ[key]);}
  });
}())
</script>

Последний раз редактировалось Deff, 28.12.2012 в 07:01.
Ответить с цитированием
  #14 (permalink)  
Старый 28.12.2012, 02:55
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Shitbox2,
<script src="http://code.jquery.com/jquery-latest.js"></script>
<button onclick="showErrors(['Ошибка 1'])">Ошибка 1</button>
<button onclick="showErrors(['Ошибка 1','Ошибка 2'])">Ошибка 1, Ошибка 2</button>
<button onclick="showErrors(['Ошибка 2','Ошибка 3'])">Ошибка 2, Ошибка 3</button>
<div id="cont"></div>
<script>
function showErrors(err) {
    var a = $("#cont");
    clearTimeout(a.data("timer"));
    !a.data("obj") && a.data("obj", {});
    for (var d = a.data("obj"), b = 0; b < err.length; b++) d[err[b]] || (a.append("<span>" + err[b] + "</span>. "), d[err[b]] = !0);
    a.data({
        obj: d,
        timer: setTimeout(function () {
            a.removeData().empty()
        }, 5000)
    })
};
</script>

Deff, как-то странно ваш код работает в Internet Explorer или это только у меня...
Ответить с цитированием
  #15 (permalink)  
Старый 28.12.2012, 04:05
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от рони
Deff, как-то странно ваш код работает в Internet Explorer или это только у меня...
У меня тож(не проверил) Поправил - походу повторное клонирование в ИЕ кривит
Ответить с цитированием
  #16 (permalink)  
Старый 28.12.2012, 04:35
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Офигенно! Даже не думал, что можно так проще. Жаль, сайт не дает плюсовать уже

P.S.
Если так записать
var Isx='<span>#</span>',TimerId_00,OBJ={};
то, вообще, самый минимализм будет. Жаль, что переменные вынесены из функции

Не очень понял строчку
a.append("<span>" + err[b] + "</span>. "), d[err[b]] = !0
Что это за условие с запятой по середине?

Последний раз редактировалось Shitbox2, 28.12.2012 в 04:43.
Ответить с цитированием
  #17 (permalink)  
Старый 28.12.2012, 04:51
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Shitbox2
Жаль, что переменные вынесены из функции
Поправил
Ответить с цитированием
  #18 (permalink)  
Старый 28.12.2012, 07:30
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от Shitbox2
a.append("<span>" + err[b] + "</span>. "), d[err[b]] = !0Что это за условие с запятой по середине?
Оператор "запятая" вычисляет оба операнда и возвращает значение второго Как правило, он используется, когда хочется включить несколько выражений в то место, где должно быть одно.

Последний раз редактировалось рони, 28.12.2012 в 07:33.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подскажите как удалить div alex2012 jQuery 5 13.10.2016 17:43
Как удалить элемент таблицы seoneo Элементы интерфейса 2 29.08.2012 18:54
Как загрузить JavaScript после создание DOM? Jeremen Общие вопросы Javascript 6 24.08.2012 21:54
Как в браузерах реализуются функции DOM (например createElement) iamme Общие вопросы Javascript 7 02.09.2011 20:26
Навигация внутри DOM. Как это сделать нормально? master_alf Events/DOM/Window 10 09.04.2010 10:18