如何在继续之前等待jQuery函数完成?

时间:2010-11-04 00:30:42

标签: jquery html ajax forms

所以现在我有代码

$('[name=dept]').live('change',function() {
$('#course').load('getCla.php?dept='+$(this).val());
$('select.speedC').selectmenu({style:'dropdown',maxHeight: 250}); 
});

基本上,它的作用是在选择值后传播表单选择菜单。问题是,第三行没有预期的动作,它试图在第二行完成填充列表之前执行。

有没有办法让第3行等到列表完成传播? (填写列表会重新格式化列表)。

2 个答案:

答案 0 :(得分:5)

使用.load()的回调参数,如下所示:

$('#course').load('getCla.php?dept='+$(this).val(), function() { 
  $('select.speedC').selectmenu({style:'dropdown',maxHeight: 250}); 
});

当响应返回并且#course元素具有新内容时,回调会运行。如果您因任何原因需要它,它还会从服务器接收返回的html作为第一个参数。

此外,由于您的初始选择器非常昂贵,我强烈推荐.delegate(),如下所示:

$('body').delegate('[name=dept]', 'change', function() {
  $('#course').load('getCla.php?dept='+$(this).val(), function() { 
    $('select.speedC').selectmenu({style:'dropdown',maxHeight: 250}); 
  });
});

答案 1 :(得分:2)

使用jQuery load()

中的回调函数

喜欢这个:

$('[name=dept]').live('change',function() {
  $('#course').load('getCla.php?dept='+$(this).val(), function (responseText, textStatus, xhr) {
    $('select.speedC').selectmenu({style:'dropdown',maxHeight: 250}); 
  });
});