0

我正在尝试使 recursive或函数正常工作,但看不到错误在哪里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);
})

问题是效果不是在回调中调用,而是一次调用。

问题

4

4 回答 4

4

在您的 fadeIn 回调中,您必须提供一个函数,而不是函数调用(您在做什么)。我会建议:

$('#method_1'+i).fadeIn('1000', function () {
    showMenu(i+1,showMenu);
});

我认为应该这样做...

这是一个展示我的更改的 jsFiddle:http: //jsfiddle.net/mAETY/1/

于 2012-06-29T19:37:52.607 回答
2

那是因为您没有提供对 的回调fadeIn,而是showMenu立即再次调用(甚至在 之前.fadeIn())。

通过实际提供一个函数来调用而不是当场调用一个函数来解决这个问题:

 $('#method_1'+i).fadeIn('1000',function() { showMenu(i+1,showMenu) });

在行动中看到

于 2012-06-29T19:38:23.320 回答
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();

});​
于 2012-06-29T19:40:53.320 回答
1

或者您可以从表格行中删除 id 和 style 并将表格行封装在潜水中,然后将 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/

于 2012-06-29T19:46:51.380 回答