2015-07-10 53 views
1

我有兩組兩個按鈕(狀態)。如果您點擊完成或保持,它將更改按鈕的背景顏色。我使用相同的類名的所有按鈕,但每個按鍵組有數據屬性data-section='Park One'data-section='Park Two'兩組按鈕,但類名相同

見工作示例:http://jsfiddle.net/1d40qhyx/

我使用$.each()功能檢測部分,刪除所有的背景,並添加選定按鈕上的背景顏色。代碼編碼好還是可以改進?

的Jquery:

$(".updateStatus").click(function() { 

    var buttonValue = $(this).val(); 
    var section = $(this).data("section"); 

    var cssClass = (buttonValue === "complete") ? 'green' : 'orange'; 

    $('.updateStatus').each(function() { 
     if ($(this).data("section") == section) { 

      $(this).removeClass("green orange"); 

      if ($(this).val() == buttonValue) { 
       $(this).addClass(cssClass); 
      } 
     } 
    }) 

}); 

HTML

<h2>Park One</h2> 

<button class="updateStatus" value="complete" data-section='Park One'>Complete</button> 
<button class="updateStatus" value="on hold" data-section='Park One'>On Hold</button> 

<h2>Park Two</h2> 

<button class="updateStatus" value="complete" data-section='Park Two'>Complete</button> 
<button class="updateStatus" value="on hold" data-section='Park Two'>On Hold</button> 
+3

嘗試http://codereview.stackexchange.com/這一點。 – colecmc

+0

如果你的'section'不能組合在一起,你可以使用你的代碼,但是如果可以組合,爲什麼不設置'div'容器將它們按照同一部分分組呢? –

+0

@SkyFang我希望我有這個想法,我的壞。 –

回答

1

您可以使用event delegation只使用一個單一的監聽器,而不是點擊事件與updateStatus類綁定到每一個元素。
這應該是更好的性能:

<div id="wrapper"> 
    <div class="section"> 
     <h2>Park One</h2> 

     <button class="updateStatus" value="complete" data-section='Park One'>Complete</button> 
     <button class="updateStatus" value="on hold" data-section='Park One'>On Hold</button> 
    </div> 
    <div class="section">  
     <h2>Park Two</h2> 

     <button class="updateStatus" value="complete" data-section='Park Two'>Complete</button> 
     <button class="updateStatus" value="on hold" data-section='Park Two'>On Hold</button> 
    </div> 
</div> 

$("#wrapper").on("click", ".updateStatus", function(){ 
    var $siblings = $(this).siblings(); 
    var cssClass = ($(this).val() === "complete") ? 'green' : 'orange'; 
    $siblings.removeClass("green orange"); 
    $(this).addClass(cssClass); 
}); 

http://jsfiddle.net/1d40qhyx/2/

+0

有趣,謝謝!兄弟姐妹是如何工作的? –

+0

它選擇當前選定元素的「兄弟」元素。 IE瀏覽器。與父元素處於相同級別的元素。 – Trace

相關問題