2013-02-06 151 views
0

我有一排圖像,當用戶單擊圖像時就會選擇該圖像。如何管理切換jQuery中點擊事件,以便:在單擊的元素之間切換

1)只有一個圖像可以在如果所選的圖像上點擊則取消時間
2)被選中。

這裏是我到目前爲止,有小提琴:http://jsfiddle.net/jamiefearon/BY9Fp/1/

$(document).ready(function() { 

    var selectedTile = null; 

    $('[id^="tile-"]').click(function() { 
      $(this).css("background", "red"); 
      $(this).css("opacity", "0.4"); 
      selectedTile = $(this).attr("name"); 
      console.log(selectedTile); 
    }); 
}); 

回答

1

我會移動的樣式合併到一個CSS類,如下所示:

.tile_wrap.selected { 
    background: red; 
    opacity: 0.4; 
} 

然後進行單擊處理類似:

var tiles = $('.tile_wrap'); 
$('[id^="tile-"]').click(function() { 
    if($(this).hasClass('selected')) 
    { 
     $(this).removeClass('selected'); 
    } 
    else 
    { 
     tiles.removeClass('selected');  
     $(this).addClass('selected'); 
     selectedTile = $(this).attr("name"); 
     console.log(selectedTile); 
    } 
}); 

您可以看到更新的jsFiddle here

+0

感謝。我已經更新了你的答案,以取消選擇一個瓷磚。 http://jsfiddle.net/jamiefearon/BY9Fp/16/ –

0

代碼的改進版本:

var $tiles = $('.tile_wrap'); 
$tiles.click(function() { 
    $(this).toggleClass('active'); 
    $tiles.not(this).removeClass('active'); 
}); 

改進使您的代碼simplier,更高效:

  • 緩存常用元素,例如$titles;
  • 通過class而不是[id^="tile-"]選擇元素,這樣會更有效率;
  • 請勿使用css方法。改爲使用addClass

http://jsfiddle.net/dfsq/BY9Fp/8/

+0

只是關於第二點的說明。頁面上可能還有其他不需要選擇的類名。 – BenM

+0

@BenM很明顯,他應該爲這個特定的任務使用類特定的類名。做一些像'[id^=「tile - 」]'這樣的事是不好的,不好的做法。 – dfsq

+0

我同意你的看法,但認爲我會指出他的方法可能還有其他原因。 – BenM