【问题标题】:Can't get recursive fadeIn,toggle,show to work无法递归淡入,切换,显示工作
【发布时间】:2012-06-29 19:33:46
【问题描述】:

我正在尝试让递归 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

【问题讨论】:

  • HTML 属性应该用双引号引起来。
  • 注意到了,无论如何似乎都没有修复它。

标签: javascript jquery callback fadein


【解决方案1】:

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

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

我认为应该这样做......

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

【讨论】:

  • 这种行为实际上并没有淡入。它只是迭代项目
  • 你在说什么?怎么不褪色?我刚刚使用我提供的代码用一个明显有效的 jsfiddle 更新了我的答案...
  • 我用的是IE8,可能是这个问题
  • 我刚打开你的小提琴,它没有淡入
  • 我刚刚在 IE7、IE8 和 IE9 中进行了测试,它们都可以正常工作。我只是看了你的 jsFiddle,它和我的完全一样......所以我不知道它对你不起作用......
【解决方案2】:

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

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

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

See in in action.

【讨论】:

    【解决方案3】:

    试试:

    $(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();
    
    });​
    

    【讨论】:

      【解决方案4】:

      或者您可以从表格行中删除 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/

      【讨论】:

      • 我刚刚测试了这个...完美运行
      • 这是一个非常有趣的行为,谁能解释为什么会这样?
      • 虽然我不确定这是否重要
      • 你的 jsfiddle 和你提供的代码不一样...fadeIn 的回调是错误的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 2016-03-19
      • 2014-06-05
      • 1970-01-01
      • 2016-06-16
      • 1970-01-01
      相关资源
      最近更新 更多