我正在尝试使用递归fadeIn
,show
或toggle
函数才能正常工作,我看不出错误在哪里。
HTML:
<table id="myTable"></table>
JavaScript的:
$(function () {
var showMenu = function (i, callback) {
if (i > 10) {
//stop
return;
} else {
$('#myTable').append('<tr id="method_1' + i + '" style="display: none;"><th><label for="id_CAM_1">CMethod (CAM):</label></th><td><select name="CAM_1_' + i + '" id="id_1_' + i + '"> <option value="2">2- canopy</option> <option value="9">9-canop</option></select> </td></tr>');
$('#method_1' + i).fadeIn('1000', showMenu(i + 1, showMenu));
}
}
showMenu(2, showMenu);
})
问题是回调中没有调用效果,而是立即调用。
答案 0 :(得分:4)
在你的fadeIn回调中,你必须提供一个函数,而不是函数调用(你正在做什么)。我建议:
$('#method_1'+i).fadeIn('1000', function () {
showMenu(i+1,showMenu);
});
我认为应该这样做......
这是一个演示我的更改的jsFiddle:http://jsfiddle.net/mAETY/1/
答案 1 :(得分:2)
这是因为您没有向fadeIn
提供回叫,而是立即再次致电showMenu
(甚至在.fadeIn()
之前)。
通过实际提供调用函数而不是在现场调用函数来解决此问题:
$('#method_1'+i).fadeIn('1000',function() { showMenu(i+1,showMenu) });
答案 2 :(得分:1)
尝试:
$(function(){
var menu = (function(i){
var $this = {
show: function(){
if(i++ > 10) return;
$('#myTable').append('<tr id="method_1'+i+'" style="display: none;"><th><label for="id_CAM_1">CMethod (CAM):</label></th><td><select name="CAM_1_'+i+'" id="id_1_'+i+'"> <option value="2">2- canopy</option> <option value="9">9-canop</option></select> </td></tr>');
$('#method_1'+i).fadeIn('1000',$this.show);
}
}
return $this;
});
menu(0).show();
});
答案 3 :(得分:1)
或者您可以从表格行中删除id和样式,并在潜水中封装表格行,然后将id和样式添加到其中。它会起作用。
$(function(){
var showMenu = function (i,callback){
if (i>10){
//stop
return;
}else{
$('#myTable').append('
<div id="method_1'+i+'" style="display: none;">
<tr><th><label for="id_CAM_1">CMethod (CAM):</label></th><td><select name="CAM_1_'+i+'" id="id_1_'+i+'"> <option value="2">2- canopy</option> <option value="9">9-canop</option></select> </td></tr>
</div>');
$('#method_1'+i).fadeIn('1000', function () { showMenu(i+1,showMenu); });
}
}
showMenu(2,showMenu);
})
修改强>