2013-08-21 85 views
1

我試圖通過this code如何在jQuery中通過更改邊框切換圖像?

var $box=null; 

$('img') 
    .click(function() { 
     if ($box == null) { 
      $box = $(this); 
      $box.css("border","5px solid green"); 
     } else { 
      $box.css("border","5px solid white"); 
      $box = null; 
     } 
    } 
); 

代碼,使通過單擊更改邊框顏色選擇 - 取消選擇圖像除了當我嘗試選擇,取消選擇和選擇相同的圖像是工作的罰款。我想通過一次點擊選擇其他圖像。

我試圖檢查if ($box == $(this))但它不起作用。

+0

是重要的存儲選擇的狀態(用於代碼的其他部分)還是隻是想切換邊框的樣式? –

+0

是的,我需要爲其他控件存儲空狀態(沒有人選擇) –

+0

好的,你是說在一組圖像中,只能選擇1個? –

回答

4

改爲使用類,並在需要時切換類。該解決方案就像一個單選按鈕(在一次邊境只有一個圖像),但允許您取消活動圖像,以及:

http://jsfiddle.net/6cGVz/

$('img').click(function() { 
    var $this = $(this); 
    if ($this.hasClass('active')) { 
     $this.removeClass('active'); 
    } else { 
     $('.active').removeClass('active'); 
     $this.addClass('active'); 
    } 
}); 
+0

非常感謝!如果($ this.hasClass('active'))對控制也有用 –

1

說明

檢查$box是點擊的元素與否。如果是的話,只要隱藏它的邊界就可以了。否則,將邊框放在單擊的元素上!


解決方案(Live Demo

的JavaScript/JQuery的

var $box=null; 

$('img') 
    .click(function() { 
     if ($box == null) { 
      $box = $(this); 
      $box.css("border","5px solid green"); 
     } else { 
      $box.css("border","5px solid white"); 
      if($box != $(this)) 
      { 
       $box = $(this); 
       $box.css("border","5px solid green"); 
      } 
      else 
       $box = null; 
     } 
    } 
); 
0

您可以將數據屬性添加到圖像本身,而不是依賴於外在的東西。

$('img') 
    .click(function() { 
     var img = $(this); 
     if (! img.data('box')) { 
      img.css("border","5px solid green"); 
      img.data('box', true); 
     } else { 
      img.css("border","5px solid white"); 
      img.data('box', false); 
     } 
    } 
); 

工作示例:http://codepen.io/paulroub/pen/qbztj

+0

不完全符合要求 –

1

更新 - 只有一個圖像可以被選擇

toggleClass of jQuery方法做起來很簡單 -

使用JS -

用CSS -

.selected{ 
    border:5px solid green; 
} 

Demo

+0

不完全符合要求 –

1

對於你的問題而言,我會把所有的圖像在一個容器:

<div id='setOfImages'> 
    <img ... > 
    <img ... > 
    <img ... > 
    <img ... > 
</div> 

切換的一類。

$('#setOfImages > img').click(function() { 
    'use strict'; 

    if($(this).hasClass('selected')) { 
     // Deselect currently selected image 
     $(this).removeClass('selected'); 
    } else { 
     // Deselect others and select this one 
     $('#setOfImages > img').removeClass('selected'); 
     $(this).addClass('selected'); 
    } 
}); 

而在你的CSS:

#setOfImages > img { 
    border: 5px solid #fff; 
} 

#setOfImages > img.selected { 
    border: 5px solid green; 
} 

jsFiddle demo

+0

非常感謝!不介意我接受傑森的回答。 –