В настоящее время я работаю с некоторым ajax, результатом успешного результата ajax является то, что на страницу добавляется дополнительный контент на лету. Моя проблема в том, что добавляется на лету, похоже, я не могу прикрепить какие-либо события к добавляемым элементам.

Происходит то, что пользователь выбирает вариант из раскрывающегося списка, значение этого выбора отправляется в функцию php, которая затем возвращает еще немного HTML на страницу, которая добавляется к div на странице.

Я знаю, что существует проблема с элементами, которые не существуют в domReady, поскольку я запускаю проверку length (), и она подтверждает, что они не «существуют» на странице.

Есть ли это, чтобы я мог запустить событие click в HTML, который добавляется после успешного возврата первого запроса ajax.

$(document).ready(function() {

//customise the select menus
$('#customselector').SelectCustomizer();;

$('.career_select .selectitems').click(function(){
    var selectedCareer = $(this).attr('title');
    $.ajax({
        type: 'POST',
        url: '/roadmap/step_two',
        data: 'career_choice='+selectedCareer+"&ajax=true&submit_career=Next",
        success: function(html){
            $('.hfeed').append(html);
            $('#grade_choice').SelectCustomizer();
          }
    });
});

$('#grade_choice_options .selectitems').click(function(){
    var selectedGrade = $('#grade_choice_customselect').val();
    alert(selectedGrade);
})

});

1
sea_1987 19 Авг 2010 в 16:03

2 ответа

Лучший ответ

Используйте live () вместо click () напрямую:

$('.career_select .selectitems').live('click', function() { ....

Live () по сути связывает любые новые элементы, которые будут добавлены впоследствии.

4
DavidGouge 19 Авг 2010 в 12:06

Попробуйте использовать этот плагин:

http://brandonaaron.net/code/livequery/docs: Live Query использует возможности Селекторы jQuery путем привязки событий или автоматического запуска обратных вызовов для согласованных элементов даже после загрузки страницы и обновления DOM.

0
Nassif Bourguig 19 Авг 2010 в 12:12