2011-11-09 63 views
0

我有一個按鈕,單擊時,應該只執行其代碼,如果具有「喜歡」類div的數量大於0.問題是,即使這是真實的,該按鈕仍然不會執行其代碼。請注意,我已經嘗試.length和.size()到相同的結果。jQuery onclick只有當變量條件滿足

$(document).ready(function() { 
countlikes = $('[id^=post_].like').length; 
likestatus = 1; 
$('#show_likes').on('click', function() { 
    if (countlikes >0) { 
     likestatus++; 

     $('[id^=post_].like').toggle(); 

     if (likestatus % 2 == 0) { 
      $('#hidelikedbtn').removeClass('hidelikedimgoff').addClass('hidelikedimgon'); 
     } else { 
      $('#hidelikedbtn').removeClass('hidelikedimgon').addClass('hidelikedimgoff'); 
     } 

    return false; 

    } else { 
     return false; 
    } 
}); 
}); 

任何想法?

+0

HTML在哪裏? – CuriousMind

+1

我不明白過分挑剔的選擇器。你想用類「like」來計數div。 $('div.like')應該沒問題。你真的把班級「喜歡」分配給div,而不是開始「post_」的ID? –

+0

是的,我其實是。 – Sweepster

回答

2

假設與元素的數量「喜歡」類的頁面加載後發生變化,問題是,你目前的值賦給countlikes只有一次,您單擊處理程序,所以每次的處理程序運行時,它會使用原始值countlikes值而不是當前值。在處理程序中移動賦值,它應該可以工作。 (雖然因爲變量只在一個地方實際使用,而您並不真的需要它,所以您可以直接在您的if語句中測試)。

此外您的問題顯示「大於1」,您的問題代碼說「> 0」,所以即使它工作,它也不會做你所描述的。

此外,無關你的問題,最後else情況下是多餘的:在年底的if你返回false,並在其他你返回false,那麼爲什麼不只是移動return false;之外,如果並刪除其他?

+0

感謝您指出我的問題不一致。我修復了它。我會對你指出的內容進行修改,讓你知道我的發現。 – Sweepster

+0

將該變量移入處理程序修復了問題,謝謝! – Sweepster

0

您需要一個var在「countlike」變量前面。

此外,你需要在你的其他變量前面的相同的東西。

+0

如果變量是全局的,則不應該爲此。 – Sweepster

+0

的確如此,但我假定所提供的代碼是相關的代碼,所以我要基於此。如果它是全球性的,那麼你是對的,這並不重要。 – Ktash