2013-02-06 74 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