Показать сообщение отдельно
  #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.
Ответить с цитированием