【问题标题】:jquery toggle questionjquery切换问题
【发布时间】:2011-01-05 06:16:36
【问题描述】:

我正在尝试创建一个主切换功能,该功能将折叠/展开所有迷你切换。我的迷你切换功能是:

$('.tog').toggle(
   function(){ 
      $('#togStat').val(1);
      var myID = $(this).attr("id").split('-')[1];
      $('#collapseObj-'+myID).hide();
      $('#collapseImg-'+myID).attr({src:'images/collapse_tcat_collapsed.gif'});
   },
   function(){ 
      $('#togStat').val(0);
      var myID = $(this).attr("id").split('-')[1];
      $('#collapseObj-'+myID).show();
      $('#collapseImg-'+myID).attr({src:'images/collapse_tcat.gif'});
});

而主人是:

    <cfoutput>
      $('.togAll').toggle(
   function(){
      <cfloop from="1" to="10" index="i">
      $('##collapseObj-#i#').hide();
      $('##collapseImg-#i#').attr({src:'images/collapse_tcat_collapsed.gif'});
      </cfloop>
      $('##collapseImg-All').attr({src:'images/expand_icon.png'}); 
      $('##collapseImg-All').attr({title:'expand all'}); 
      $('##collapseImg-All').attr({alt:'expand all'}); 
   },
   function(){ 
      <cfloop from="1" to="#getMaxCatID.catID#" index="i">
      $('##collapseObj-#i#').show();
      $('##collapseImg-#i#').attr({src:'images/collapse_tcat.gif'});
      </cfloop>
      $('##collapseImg-All').attr({src:'images/collapse_icon.png'}); 
      $('##collapseImg-All').attr({title:'collapse all'});
      $('##collapseImg-All').attr({alt:'collapse all'});
      });
      </cfoutput>

我正在使用冷融合。 master 函数循环 1 到 X 并创建类似于:

 $('#collapseObj-1').hide();
 $('#collapseObj-2').hide();
 $('#collapseObj-1').hide();

我的问题是当我单击主切换时,我必须双击迷你切换才能打开折叠的 div。有没有办法将 toggle(even,odd) 更改为 toggle(odd,even) ? 谢谢

【问题讨论】:

  • 离题:您可以链接您的 jQuery 命令而无需重新选择节点:$('some selector').show().attr(...); 此外,您传递给attr 的大多数对象都可以压缩为一个调用.
  • 我试过做:attr({src:'images/collapse_icon.png'},{title:'collapse all'},...);但它不喜欢它。也许我应该这样做 $('##collapseImg-All').attr({src:'images/collapse_icon.png'}).attr({title:'collapse all'}).attr({alt:'collapse all '});
  • 不,他是说要做$('#element_id').attr({key1:val1, key2:val2, key3:val3}); 你应该阅读jQuery basics
  • 行得通。所以,我创建了一个 tog_alt 类,它以相反的顺序隐藏/显示。我试过 $('##collapseImg-#i#').removeClass('tog').addClass('tog_alt');但这也行不通。

标签: jquery toggle


【解决方案1】:

这似乎与 onclick 动作相关联:

   if (!$('#collapseObj-1').is(':hidden')) {
        $('#collapseObj-1').hide();
        $('#collapseImg-1').attr({src:'images/collapse_tcat.gif'});
     } else {
        $('#collapseObj-1').show();     
        $('#collapseImg-1').attr({src:'images/collapse_tcat_collapsed.gif'});
     }

【讨论】:

    【解决方案2】:

    首先,jQuery.toggle 实际上切换了可见性。您似乎将其视为具有 onShow 和 onHide 参数的函数,这是错误的。见http://api.jquery.com/toggle/。您编写它的方式,您有 2 个函数作为参数,但 toggle 需要任何一个

    • 布尔显示或隐藏
    • int 持续时间,函数回调
    • int 持续时间、字符串缓动、函数回调

    显然您对.toggle() 的使用是错误的。如果您想在某个事件发生时更改可见性,您可以使用一个函数编写它,该函数根据当前可见性显示/隐藏一个迷你切换。我看不到#togStat 做了什么,但我保留了它。

    var togStat = $('#togStat');
    
    function miniToggle(id) {
        var elem = $('#collapseObj-' + id);
        if (elem.is(':visible')) {
            togStat.val(1);
            elem.hide();
            $('#collapseImg-' + id).attr({src: 'images/collapse_tcat_collapsed.gif'});
        } else {
            togStat.val(0);
            elem.show();
            $('#collapseImg-' + id).attr({src: 'images/collapse_tcat.gif'});
        }
    }
    

    您可以像这样将其称为元素编号(例如在您的示例中):

    miniToggle(1);
    

    我希望这对你有帮助。如果没有,您可能需要发布一个示例页面,以便我们查看实际代码。

    【讨论】:

    • if (elem.is(':visible')) 始终为真。它没有看到 hide() 事件。
    • 如果 (elem.is(':visible')) 为真,elem 被隐藏,并且在下一次调用时它不会为真。我也很感激任何关于为什么这被标记下来的信息。我误解了这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多