2012-07-10 78 views
1

我有分頁一個新的問題:類容器的改變如何更改div容器的類別?

.page_button { 
    height:20px; 
    width:15px; 
    padding-left:4px; 
    padding-right:4px; 
    display:block; 
    float:left; 
    border:2px solid #000000; 
    margin-right:4px; 
    text-decoration:none; 
    text-align:center; 
    cursor: pointer; 
} 

.selected_page_button { 
    color : #FFFFFF; 
    height:20px; 
    width:15px; 
    padding-left:4px; 
    padding-right:4px; 
    display:block; 
    float:left; 
    margin-right:4px; 
    text-decoration:none; 
    text-align:center; 
    background:#0088cc; 
    border:2px solid #000000; 
} 

和代碼:

$(".page_button").click(function() { 
    $(".selected_page_button").attr("class", "page_button"); 
    $(this).attr("class", "selected_page_button"); 
}); 

它可以正確處理所有容器不首先

<br><b>Page:</b><br/> 
<?php 
    for($i=0; $i<$count; $i++) 
    { 
    if ($i==0) 
    { 
     echo "<div class='selected_page_button'>".($i+1)." "."</div>"; 
    } 
    else 
    { 
     echo "<div class='page_button'>".($i+1)." "."</div>"; 
    } 
    } 
?> 

CSS代碼。當我的頁面被創建時,第一頁被選中。當點擊「2」時,「1」很簡單,選擇「2」。所有沒有「1」的容器也是如此:如果我點擊「2」(或其他),那麼我不能先點擊! 「1」改變它的視圖,但不會改變行爲,因爲簡單的容器是可點擊的,並且選擇的容器是不可點擊的!

+1

問題是這個選擇器'$(「。page_button「)。clic ...'。但是你在CSS中有冗餘,在class屬性中保留所有帶'page_button'的按鈕,並且在選擇的情況下添加另一個類。 – 2012-07-10 13:38:53

+0

你可以在你的答案中給我代碼嗎?作品我會將你的答案標記爲正確 – user1477886 2012-07-10 13:49:23

+0

檢查我的答案 – 2012-07-10 13:57:16

回答

0

jcubic對他的解決方案是正確的,但不是他的實現。您需要確保該事件綁定到所有page_buttons,即頁面加載時存在的頁面以及稍後存在的頁面。

jQuery的'on'和'live'函數可以實現這一點。這些函數將偵聽器綁定到容器元素,並等待事件向上冒泡,這樣即使稍後添加了page_button,事件仍會觸發偵聽容器。

下面是正確執行這些功能:

$('#paginationLinkContainer').on('click','.page_button',function() { 
    $('.selected_page_button').attr('class','page_button'); 
    $(this).attr('class','selected_page_button'); 
}); 

在該塊中,聽衆被綁定到容器(你可能需要添加到您的標記)和過濾器,使其只執行時事件源已經從'.page_button'冒泡了。

而對於老版本的jQuery

$('.page_button').live('click',function() { 
    $('.selected_page_button').attr('class','page_button'); 
    $(this).attr('class','selected_page_button'); 
}); 
+0

非常感謝你很多,你是對的。 – user1477886 2012-07-10 13:56:01

1

這是因爲您只選擇那些在開始時具有此類的$(".page_button"),並且因爲稍後設置了.page_button,處理程序將不會執行。

你會想用 '活',或在較新的jQuery的版本中, '開' 的功能

$(".page_button").on("click", function(event){ 
    $(".selected_page_button").attr("class", "page_button"); 
    $(this).attr("class", "selected_page_button"); 
}); 
+0

對不起,但你的解決方案不起作用 – user1477886 2012-07-10 13:46:36

0

如何:

$(".page_button").live("click",function() { 
    $(".selected_page_button").removeClass("selected_page_button").addClass("page_button"); 
    $(this).removeClass("page_button").addClass("selected_page_button"); 
}); 

不過,我建議輕微重寫,使你有兩個類.page_button和.selected或一些其他的命名,其中div總是擁有class .page_button,並且選中的兩個類都是.page_button.selected。然後可以應用以下內容。

$(".page_button").live("click",function(){ 
    $(".page_button").removeClass("selected"); 
    $(this).addClass("selected"); 
}); 
+0

對不起,但你的解決方案不起作用 – user1477886 2012-07-10 13:46:14

+0

只是把它放入jsFiddle中,看起來沒問題,是什麼問題?在這裏查看:http://jsfiddle.net/nn44y/ – idodev 2012-07-10 14:00:22

+0

雖然我在這裏,繼承人鏈接到我提出的第二個建議:http://jsfiddle.net/32dAa/1/ – idodev 2012-07-10 14:17:25

0

這裏是我更好的解決方案代碼:

<br><b>Page:</b><br/> 
<?php 
    for($i=0; $i<$count; $i++) 
    { 
    if ($i==0) 
    { 
     echo "<div class='page_button selected'>".($i+1)." "."</div>"; 
    } 
    else 
    { 
     echo "<div class='page_button'>".($i+1)." "."</div>"; 
    } 
    } 
?> 

CSS代碼:

.page_button { 
    height:20px; 
    width:15px; 
    padding-left:4px; 
    padding-right:4px; 
    display:block; 
    float:left; 
    border:2px solid #000000; 
    margin-right:4px; 
    text-decoration:none; 
    text-align:center; 
    cursor: pointer; 
} 

.selected { 
    color : #FFFFFF; 
} 

和代碼級的改變貨櫃:

$(".page_button").click(function() { 
    $(".page_button").removeClass("selected"); 
    $(this).addClass("selected"); 
});