Mail.ruПочтаМой МирОдноклассникиИгрыЗнакомстваНовостиПоискВсе проекты

Помогите сделать условие, если select не пустой.

Мастер (1289), закрыт 1 месяц назад
У меня многострочный select, который я наполняю при помощи append(), либо очищаю при помощи remove(). В момент наполнения (или после), все option должны нумероваться через data-* атрибут.

Я делаю это так:
$('.left option').each(function(i){
$(this).attr('data-num', i);
});

Так как, данный способ нумерует только, при загрузки страницы, если просто обвёрнут в $(document).ready(function(){}, то соответственно при добавлении option ничего не происходит.

Помогите сделать условие, если в select есть хотя бы один option, то будет выполняться данная функция.
Дополнен 1 месяц назад
Я нашёл 2 варианта решения своей проблемы:

1.)
$(document).on("DOMNodeInserted", ".left option", function() {
$('.left option').each(function(i){
$(this).attr('data-num', i);
});
});
Но это происходит слишком медленно, так как срабатывает в момент добавления.

2.)
function DataTime() {
$('.left option').each(function(i){
$(this).attr('data-num', i);
});
}
$(function(){
var int = setInterval(DataTime, 1000);
});

Но данный способ, всё ещё вызывает у меня смутные сомнения. Что если бы, я вывел тысячу строк и все они постоянно пронумеровывались.
Дополнен 1 месяц назад
Оба решения совершенно не годятся, так как нужно нумеровать единожды, после обновления списка в select. То есть, после нумерации, data-* атрибут должен оставаться статичным и обновляться только после remove().
Лучший ответ
https://jsfiddle.net/pmjcazs9/
Лучше сначала нажать кнопку "посчитать", потом "заполнить", потом опять "посчитать". Далее можно опять нажать "заполнить" и "посчитать".
Но как я писал в другом ответе, нет смысла проверять пустой список или нет. Пустой список обновляется так же быстро как проверка списка на пустоту.
Остальные ответы
Комментарий удален
Дед Мазай Просветленный (33082) "при добавлении option ничего не происходит" Когда добавляешь option, добавляй атрибут. В чём проблема?
Похожие вопросы
Также спрашивают