好的,这是我使用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>
答案 0 :(得分:1)
问题是你有一个全局变量被覆盖并导致不良影响。
var $panel = $(this).closest(".panel-container").find(".panel");
该行将$panel
设置为全局变量,因为它除了document.ready
之外没有父作用域。当您在其中一个回调闭包内时,再次定义$panel
时会产生利益冲突。请考虑更改这些名称以消除冲突。
结果是在
内部调用全局$panel
function( response ) {
$('#boxes').append( response ).masonry( 'reload' );
$panel.hide("slow");
}
而不是调用您正在考虑的本地化版本。这就是为什么只有其中一人藏匿的原因。
答案 1 :(得分:0)
为$('#fame.trigger-loop').click
和$('#new.trigger-loop').click
;
var $panel = $(this).closest('ul').find(".panel-container").find(".panel");