2012-05-18 2 views
2

У меня есть этот код из примера, который я нашел полезным в Интернете. Он использует два списка, один слева, другой справа, и он разбивает элемент слева на правый и наоборот. Это HTML с отборным с опциями:Обнаружить, если список пуст (не имеет параметров)

<select id="SelectLeft" multiple="multiple"> 
<option value="1">Stack Overflow</option> 
<option value="2">Server Fault</option> 
<option value="3">Ask Ubuntu</option> 
<option value="4">Super User</option> 
</select> 
<button id="MoveRight"> >> </button> 
<button id="MoveLeft"> << </button> 
<select id="SelectRight" multiple="multiple"></select> 

Это Javascript для перемещения элементов между ListBoxes:

$(function() { 
$("#MoveRight,#MoveLeft").click(function(event) { 
    var id = $(event.target).attr("id"); 
    var selectFrom = id == "MoveRight" ? "#SelectLeft" : "#SelectRight"; 
    var moveTo = id == "MoveRight" ? "#SelectRight" : "#SelectLeft"; 
    var selectedItems = $(selectFrom + " :selected").toArray(); 
    $(moveTo).append(selectedItems); 
    selectedItems.remove; 
    }); 
}); 

Как вы можете видеть, код просто определяет, какие выбраны элементы должны добавляться и удаляться в соответствии с нажатой кнопкой. Мне нужно определить, когда список справа («SelectRight») не имеет параметров. Например, в самом начале, когда ничего не было нажато, или если пользователь удаляет все элементы. Мне нужен способ обнаружить это, чтобы я мог инициировать процесс проверки, который у меня есть.

Я был не в духе! Надеюсь, вы можете помочь мне, спасибо =)

EDIT: Спасибо за ваши ответы, я обнаружил, что $("#SelectRight").is(":empty") кажется, что мне нужно. Однако поведение это не то, что мне нужно ... Мне нужно событие, которое будет запускаться каждый раз, когда он будет опустошен. Например, если я делаю это:

if($("#SelectRight").is(":empty")) alert("It works?? =O"); 

Это предупреждение она отображается только при загрузке страницы, но если добавить, а затем удалить элемент, он не вызывает больше. Поэтому, я думаю, мне нужно добавить обработчик событий или что-то еще ... Может быть, JQuery .on() или что-то?

Может кто-нибудь, пожалуйста, просветить меня? =) СПАСИБО!

ответ

3

Как насчет:

$("#MoveRight,#MoveLeft").click(function(event) { 
    var id = $(event.target).attr("id"); 
    var selectFrom = id == "MoveRight" ? "#SelectLeft" : "#SelectRight"; 
    var moveTo = id == "MoveRight" ? "#SelectRight" : "#SelectLeft"; 
    var selectedItems = $(selectFrom + " :selected").toArray(); 
    $(moveTo).append(selectedItems); 
    selectedItems.remove; 
    if($('#SelectRight option').length<=0) console.log('Right empty'); 
});​ 

jsFiddle example.

+0

Я никогда не использовал jsFiddle, но я видел, что они много используют, это здорово;) – Metafaniel

+0

Это отвечает на мой отредактированный вопрос, который был моей главной проблемой! Даже если использование '$ (" # SelectRight "). (": Empty ")' кажется достаточно чистым, поведение, которое я хотел, выполнялось только с помощью .length <= 0', поскольку оно срабатывает только при полном опустошении списка. – Metafaniel

8
$("#SelectRight").is(":empty") 
+0

Это, по-видимому, самый чистый способ сделать это;) – Metafaniel

+2

Чтобы ответить на ваш отредактированный вопрос, вам нужно поместить код в обработчик кликов и в другое место, где может быть опущен список. –

4
$('#SelectRight option').length: 

или

$('#SelectRight').is(':empty'); 
+0

Вы не имеете в виду SelectRight? – j08691

1

Используйте это:

​$('#SelectRight').find('option').size(); 
+1

'длина' всегда лучше. – VisioN

0

почему бы не просто добавить, если проверка, если список опустошается заявление. Я бы поместил его после selectedIteams.remove, это будет проверять его каждый раз, когда функция вызывается, чтобы изменить окно списка, что и будет его пустым. или вы можете добавить функцию onchange = 'someFunction()' в свой элемент и проверять каждый раз, когда элемент изменяется.

Смежные вопросы