Как связать событие после ajax успех в jQuery

Таким образом, вот мой код:

$(document).ready( function() {
$('#form').bind('change', function(){
    $.ajax({
    type: 'get',
    url: 'api.php',
    data: 'task=getdirs&formname='+$('#form').attr('value'),
    dataType: "text",
    success: function (html){
        $('#chdir').html(html);
        $('#chdir select').bind('change', getDirs());
        }
    });
});
function getDirs(){
}})

#form здесь имеет a <select> элемент. Вызов ajax возвращает часть HTML с новым <select> элемент.
Это работает хорошее: в #chdir отделение я получаю новый выпадающий элемент. Но событие в success часть стреляет только однажды. Затем это событие не работает больше вообще.
Что я могу сделать для создания недавно созданный <select> работа элемента таким же образом как первое?

5
задан YOMorales 3 July 2011 в 05:12
поделиться

3 ответа

Вы вызываете функцию getDirs непосредственно при вызове метода bind , вам следует делать это, только если это функция возвращает другую функцию, но я думаю, что это не так.

Изменение:

$('#chdir select').bind('change', getDirs());

Кому:

$('#chdir select').bind('change', getDirs);

Или, если вы используете jQuery 1.4+, вы можете привязать событие change к методу live только один раз, и вы не нужно повторно связывать событие после этого:

$(document).ready(function () {
  $('#chdir select').live('change', getDirs);
});
10
ответ дан 18 December 2019 в 10:44
поделиться

Если я правильно вас понял, проблема в том, что событие не работает с вашим динамически созданным элементом select.

Если да, то решение простое ... попробуйте следующее:

$('#form').live('change', function()...

Обновление: В более новых версиях jQuery вы должны использовать on () вместо live () .

2
ответ дан 18 December 2019 в 10:44
поделиться

Вместо использования связывания попробуйте использовать .live . Для этого вам понадобится последняя версия jQuery.

0
ответ дан 18 December 2019 в 10:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: