2

好吧,这是我使用 JQuery 的第一天,所以请尽情享受我制作的这些功能。当单击不同的触发器时,我试图隐藏一个 div (#panel)。下面是三个函数,其中三个函数在使用时都需要隐藏(#panel)。我设置它的方式仅适用于第一个功能。另外两个不隐藏元素。所以事不宜迟。

jQuery(document).ready(function($){
var $panel = $(this).closest(".panel-container").find(".panel");
$('#searchsubmit').click(function(e){
    $('#boxes').empty();
    e.preventDefault();
    var $panel = $(this).closest(".panel-container").find(".panel");
    var search_val=$("#s").val();
    $.post(
        WPaAjax.ajaxurl,
        {
            action : 'loop_search',
            search_val : search_val
        },
        function( response ) {
            $('#boxes').append( response ).masonry( 'reload' );
            $panel.hide("slow");
            $('.trigger').removeClass("active");
            $('.trigger-loop').removeClass("active");
        }
    );
});
$('#fame.trigger-loop').click(function(){
var $panel = $(this).closest(".panel-container").find(".panel");
    $('.trigger').removeClass('active');
    $('.trigger-loop').removeClass('active');
    $('#fame.trigger-loop').addClass('active');
    $('#boxes').empty();
    $.post(
        WPaAjax.ajaxurl,
        {
            action : 'loop_fame'
        },
        function( response ) {
            $('#boxes').append( response ).masonry( 'reload' );
            $panel.hide("slow");
        }
    );
});
$('#new.trigger-loop').click(function(){
var $panel = $(this).closest(".panel-container").find(".panel");
    $panel.hide("slow");
    $('.trigger').removeClass('active');
    $('.trigger-loop').removeClass('active');
    $('#new.trigger-loop').addClass('active');
    $('#boxes').empty();
    $.post(
        WPaAjax.ajaxurl,
        {
            action : 'loop_new',
        },
        function( response ) {
            $('#boxes').append( response ).masonry( 'reload' );
            $panel.hide("slow");
        }
    );
 });

});

//--html

<li>
 <a id="fame" class="trigger-loop active" href="#"><div id="fame-icon"></div></a>
</li>
<li>
 <a id="new" class="trigger-loop" href="#"><div id="gold-artist"></div></a>
</li>
<li>
 <div class="panel-container">
  <div class="panel">
     <----content----->
  </div>
  <a class="trigger" href="#"><div id="playlist-icon"></div></a>
 </div>
</li>
<li>
 <div class="panel-container">
  <div class="panel">
     <----content----->
  </div>
  <a class="trigger" href="#"><div id="random-icon"></div></a>
 </div>
</li>
4

2 回答 2

1

问题是您有一个全局变量被覆盖并导致不良影响。

var $panel = $(this).closest(".panel-container").find(".panel");

该行将设置$panel为全局变量,因为它除了document.ready. $panel当您在其中一个回调闭包中时,再次定义时存在利益冲突。考虑更改这些名称以消除冲突。

结果是$panel在内部调用全局

function( response ) {
        $('#boxes').append( response ).masonry( 'reload' );
        $panel.hide("slow");
 }

而不是调用您正在考虑的本地化版本。这就是为什么只有一个人在躲藏。

于 2012-06-29T23:03:55.413 回答
0

试试这个$('#fame.trigger-loop').click$('#new.trigger-loop').click;

var $panel = $(this).closest('ul').find(".panel-container").find(".panel");
于 2012-06-29T23:10:39.037 回答