无法获得递归fadeIn,切换,显示工作

时间:2012-06-29 19:33:47

标签: javascript jquery callback fadein

我正在尝试使用递归fadeInshowtoggle函数才能正常工作,我看不出错误在哪里。

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);
})

问题是回调中没有调用效果,而是立即调用。

Problem

4 个答案:

答案 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) });

See in in action

答案 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);                                                           

})

修改

http://jsfiddle.net/weightlossexp/V3gDE/