2012-01-26 3 views
0

У меня есть две функции ajax, которые извлекают объекты JSON с использованием .getJSON, а затем создают таблицу и раскрывающееся меню, используя содержимое этих объектов. Это очень хорошо работает. Теперь я пытаюсь прикрепить событие к каждому из флажков, расположенных в первом столбце таблицы. Естественно, я хочу, чтобы это произошло после того, как были сделаны вызовы ajax. Функция .when() JQuery кажется хорошим решением в том смысле, что она будет ждать завершения обеих функций ajax. Ниже мой код. Я не уверен, что я сделал не так. По какой-то причине предупреждение внутри функции .when не срабатывает. Может кто-нибудь указать, что я сделал неправильно?Событие checkbox .change() не запускается внутри jQuery .when()

$(document).ready(function() { 

$.when(createSpotsTable(), createMarketDropDown(1)) 
$('input:checkbox').click(function() { 
    $('input:checkbox').change(
     alert("Hello world!") 
    ); 
}); 

}); 

ответ

1

Кажется, что в вашем коде отсутствуют некоторые вещи. Например, вы не регистрируете обратный вызов для объекта, возвращаемого $.when. Это означает, что при завершении Ajax-вызовов код не будет выполняться. Вместо этого $('input:checkbox').click(...) будет выполнен немедленно.
Возможно, вы думаете, что $.when блокирует выполнение, но это не так. Посмотрите на documentation.

Кроме того, вы присваиваете значение возврата из alert как обработчик события, но вы должны пройти функцию к .change.

Я думаю, что вы хотите:

$.when(createSpotsTable(), createMarketDropDown(1)).done(function() { 
    $('input:checkbox').change(function() { 
     alert("Hello world!") 
    }); 
}); 

Но вы не должны использовать $.when, вы можете просто использовать делегации событий:

createSpotsTable(); 
createMarketDropDown(1); 

$(document).on('change','input:checkbox', function() { 
    alert("Hello world!") 
}); 
+0

Спасибо Феликс. Это прояснило мне несколько вещей. Однако со вторым подходом моя консоль Javascript показывает следующее: «Uncaught TypeError: Object [object Object] не имеет метода« on ». Это относится к строке 19 в jquery.js. Любые мысли о том, что может быть проблемой? – hughesdan

+0

@hughesdan: Вероятно, вы не используете последнюю версию jQuery;) (1.7.1) –

+0

Да, это действительно проблема. Спасибо! +1 для ответа на вопрос в вопросе. – hughesdan

0

Использование живого события,

jQuery.getJSON('xyz.com',function(){ 
    $('input:checkbox').live('click',function() { 
    // Do you processing. 
    }) 
}); 
+0

Спасибо. Похоже, что живое мероприятие устарело. http://api.jquery.com/live/ – hughesdan

+0

Спасибо, что до моего уведомления. Как вам известно, используйте 'on'. – Jashwant

+0

Зачем вам использовать 'live' внутри обратного вызова? Преимущество 'live' заключается в том, что вы можете в любое время зарегистрировать обработчик событий. Поэтому вы должны сделать это, прежде чем совершать вызов Ajax. –

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