Цитата:
Цитата:
|
Эх. Обнаружил и у себя косяк, поэтому пришлось одну строчку добавить, так что мой код не короче. Вот работающий пример. Он показывает ошибки без дубликатов + продляет таймер. Собственно, по этим вопросам и тереблю форум целый день
<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>
|
<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>
|
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 или это только у меня... |
Цитата:
|
Офигенно! Даже не думал, что можно так проще. Жаль, сайт не дает плюсовать уже
P.S. Если так записать
var Isx='<span>#</span>',TimerId_00,OBJ={};
то, вообще, самый минимализм будет. Жаль, что переменные вынесены из функции Не очень понял строчку
a.append("<span>" + err[b] + "</span>. "), d[err[b]] = !0
Что это за условие с запятой по середине? |
Цитата:
|
Цитата:
|
| Часовой пояс GMT +3, время: 22:36. |