Checkbox.change()事件未在jQuery.when()内部触发

Checkbox.change()事件未在jQuery.when()内部触发,jquery,Jquery,我有两个ajax函数,它们使用.getJSON获取JSON对象,然后使用这些对象的内容构建一个表和下拉菜单。这一切都很好。现在,我尝试将事件附加到表第一列中的每个复选框。当然,我希望在ajax调用完成后发生这种情况。JQuery的.when()函数似乎是一个很好的解决方案,因为它将等待两个ajax函数完成。下面是我的代码。我不确定我做错了什么。由于某些原因,.when函数内部的警报未触发。有人能指出我做错了什么吗 $(document).ready(function () { $.when(c

我有两个ajax函数,它们使用.getJSON获取JSON对象,然后使用这些对象的内容构建一个表和下拉菜单。这一切都很好。现在,我尝试将事件附加到表第一列中的每个复选框。当然,我希望在ajax调用完成后发生这种情况。JQuery的.when()函数似乎是一个很好的解决方案,因为它将等待两个ajax函数完成。下面是我的代码。我不确定我做错了什么。由于某些原因,.when函数内部的警报未触发。有人能指出我做错了什么吗

$(document).ready(function () {

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

});

您的代码似乎缺少一些内容。例如,您没有注册对
$返回的对象的任何回调。这意味着,当Ajax调用完成时,不会执行任何代码。相反,将立即执行
$('input:checkbox')。单击(…)

阻止执行时,您可能认为,
$,但事实并非如此。看一看这张照片

此外,您将
警报
的返回值指定为事件处理程序,但必须将函数传递给
.change

我想你想要的是:

$.when(createSpotsTable(), createMarketDropDown(1)).done(function() {
    $('input:checkbox').change(function () {
       alert("Hello world!")
    });
});
但您不必使用
$。当使用
时,您可以使用事件委派:

createSpotsTable();
createMarketDropDown(1);

$(document).on('change','input:checkbox', function () {
    alert("Hello world!")
});
使用实时事件

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

谢谢不过,看起来live event已被弃用。谢谢你提醒我。您可能知道,使用“on”。为什么要在回调中使用
live
live
的优点是可以随时注册事件处理程序。因此,在进行Ajax调用之前,您应该这样做。谢谢Felix。这为我澄清了几件事。然而,在第二种方法中,我的Javascript控制台显示了以下“uncaughttypeerror:Object[Object Object]没有“on”方法”。它指的是jquery.js中的第19行。有什么想法吗?@hughesdan:您可能没有使用最新版本的jQuery;)是的,这确实是个问题。谢谢大家!+1回答问题中的问题。