2013-10-28 158 views
0

我幾個小時後發佈了一個問題,但我的例子並不完美。關於懸停和點擊功能/ jquery

所以就這樣了。

我有兩個大箱子。在懸停每個大紅色的盒子時,小黑盒子應該改變它的bg顏色。當你點擊每個大盒子時,小盒子的顏色也應該改變。鼠標進出它的工作正常。但點擊它不起作用。我嘗試綁定/解除綁定,但沒有奏效。

的Jquery:

$('.libg').click(function() { 
    $('.imagebg').removeClass('active'); 
    $(this).find('.imagebg').addClass('active'); 
}).hover(
function() { 
    $(this).find('.imagebg').addClass('active'); 
}, 
function() { 
    $(this).find('.imagebg').removeClass('active'); 
}); 

的jsfiddle是http://jsfiddle.net/squidraj/kdZ8J/2/

請指點。謝謝。

+0

負投票!!! ..沒想到的是,雖然。 –

+0

「當你點擊每個小盒子時,盒子的顏色也會改變。」 ==>哪個框的顏色應該改變?大的還是小的? – NKD

+0

@NKD ...小的一個。 –

回答

0

我會單獨檢查每個框。所以我打算修改你的html代碼以及一些jQuery代碼。 http://jsfiddle.net/kdZ8J/15/

HTML代碼:

<ul> 
    <li class="libg1" id="1"> 
    <div class="imagebg1" id="1a"></div> 
    </li> 
    <li class="libg2" id="2"> 
    <div class="imagebg2" id="2a"></div> 
    </li> 
</ul> 

手柄click事件:

$('#1').click(function() { 
    //add the click and set active class 
    $(this).data('clicked', true); 
    $('#1a').addClass('active'); 
    //remove the click and active class 
    $('#2').data('clicked', false); 
    $('#2a').removeClass('active'); 
}) 
$('#2').click(function() { 
    //add the click and set active class 
    $(this).data('clicked', true); 
    $('#2a').addClass('active'); 
    //remove the click and active class 
    $('#1').data('clicked', false); 
    $('#1a').removeClass('active'); 
}) 

首先Rectugular懸停代碼:

$('.libg1').hover(function() { 
    if($(this).data('clicked')) { 
    //check if active class exists 
    if($('.active').size()){ 
     $('#1a').removeClass('active'); 
    } 
    else{ 
     $('#1a').addClass('active'); 
    } 
    } 
    else{ 
    $('#1a').addClass('active'); 
    } 
},function() { 
    if($(this).data('clicked')) { 
     $('#1a').addClass('active'); 
    } 
    else{ 
     $('#1a').removeClass('active'); 
    } 
}); 

第二條形霍芬代碼:

$('.libg2').hover(function() { 
    if($(this).data('clicked')) { 
    //check if active class exists 
    if($('.active').size()){ 
     $('#2a').removeClass('active'); 
    } 
    else{ 
     $('#2a').addClass('active'); 
    } 
    } 
    else{ 
    $('#2a').addClass('active'); 
    } 
},function() { 
    if($(this).data('clicked')) { 
    $('#2a').addClass('active'); 
    } 
    else{ 
    $('#2a').removeClass('active'); 
    } 
}); 
+0

對不起,我編輯了我的問題。點擊每個大盒子的小盒子顏色也應該改變。 –

+0

好的你的代碼正在做一個circluar添加/刪除類。您的點擊實際上正在工作,但由於您使用懸停進行綁定,因此會將其反轉回去。 – NKD

+0

解決方案是檢查是否有更大的方塊「被點擊」。因此,在你的click()函數中,你可以檢查一下這個更大的盒子是否已經被點擊過,如$(this).data('clicked',true);然後在你的hover()函數中添加一個if語句來執行添加/刪除類,以確定它之前是否被點擊過。 – NKD

0

你的代碼,兩個相互矛盾行:

$('.imagebg').removeClass('active'); 
$(this).find('.imagebg').addClass('active'); 

第一行會刪除類,第二個將添加類右後衛的元素。

http://jsfiddle.net/kdZ8J/4/

$('.libg').click(function() { 
    var current = $(this).find('.imagebg'); 
    var all = $('.imagebg'); 
    var index = all.index(current); 

    $('.imagebg').each(function(i) { 
     if(i != index) { 
      $(all[i]).removeClass('active'); 
     } 
    }); 

    if(current.hasClass('active')) { 
     current.removeClass('active'); 
    } else { 
     current.addClass('active'); 
    } 
}).hover(
function() { 
    $(this).find('.imagebg').addClass('active'); 
}, 
function() { 
    $(this).find('.imagebg').removeClass('active'); 
}); 
+0

是的,因爲一次只有一個小盒子可以有一個活躍的課程。 –

+0

你是否看到了所有你沒有看到的信息?我們不可能爲您提供如此多的遺失信息。 – Sam