2010-10-28 3 views
3

Я работаю с системой авторизации. У меня четыре неупорядоченных списка. Назовем их list1, list2, list3 и list4. два из них о странах и остальные два - о городах. list1 содержит все страны. list2 содержит все доступные страны для одного сотрудника. Пользователи перемещают одну страну из списка1 в список2. когда пользователь нажимает list2, я могу обработать это событие, и я населяю город этой страны, чтобы list3 с jquery. Этот список городов происходит с веб-страницы aspx. Я хочу обработать событие click4 списка. list4 содержит все доступные города для сотрудников. Я написал эти строки.Как я могу обработать событие щелчка динамически заполненного ul?

$('#clist2 li').click(function() { 
    alert('test'); 
}); 

Но я не видел предупреждения. Как я могу обработать событие click4 списка?

ответ

5

Вы можете использовать .delegate() здесь, как это:

$('#clist2').delegate('li', 'click', function() { 
    alert('test'); 
}); 

$('#clist2 li') получает все <li> элементы внутри #clist2в то время, вместо этого вы можете связать обработчик #clist2 непосредственно который прослушивает для click событий из любые <li> элементы (присутствующие или добавленные позже, их события пузырь так же) до bubble up.

+0

+1 IMO, метод '.live()' должен быть удален из API. – user113716

+0

@patrick dw: Зачем же вы этого хотите? Мне нравится этот метод делегата для этого конкретного SO-вопроса, но есть много сценариев, когда он дает код меньше, чем чистый, или может вызвать головные боли обслуживания. Live - полезный инструмент, который следует использовать, когда это необходимо. – rfunduk

+1

@thenduks - есть минусы '.live()', давайте возьмем простой пример: '$ (" [attr = value] "). Live (" click ", function() {});'. Что это сделал? Он выполнил очень дорогой селектор, чтобы найти все элементы с этой парой атрибут/значение ... затем отбросил результат, потому что мы вообще этого не заботимся, нам нужен только селектор для обработчика 'click' на' document' в первую очередь. Сравните с: '$ (" body "). Delegate (" [attr = value] "," click ", function() {});' который * не * выполняет этот селектор, это намного дешевле. –

1

Вы можете использовать .live(), чтобы все события li получили события щелчка независимо от того, существуют ли они во время привязки или нет (например, селектор просто должен совпадать).

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