Не bind
и unbind
, чтобы сделать это.
Выберите общего предка и используйте делегирование событий на основе селектора jQuery.
var clickables = $('.clickable');
$('#some_ancestor').delegate( '.clickable', 'click', function() {
// to disable the others
clickables.not( this ).removeClass('clickable');
});
Затем, чтобы снова включить их, просто добавьте класс обратно.
clickables.addClass( 'clickable' );
Если вы используете jQuery 1.7 или более позднюю версию, используйте вместо этого .on()
, поскольку в него встроено делегирование событий.
$('#some_ancestor').on( 'click', '.clickable', function() {
// to disable the others
clickables.not( this ).removeClass('clickable');
});
Вот одно из решений из комментариев ниже.
демо: http://jsfiddle.net/c9Ydy/3/
<ul id="container">
<li id="link1" class="box clickable">
<a href="#">LINK ONE</a>
</li>
<li id="link2" class="box clickable">
<a href="#">LINK TWO</a>
</li>
<li id="link3" class="box clickable">
<a href="#">LINK THREE</a>
</li>
</ul>
<div id="content_display">
<button>CLOSE</button>
<p id="link1_content">THIS IS THE CONTENT FOR THE FIRST LINK.</p>
<p id="link2_content">THIS ONE IS FOR THE SECOND LINK</p>
<p id="link3_content">AND THIS IS THE THIRD LINK</p>
</div>
1025 * JS *
var clickables = $('.clickable'),
display = $('#content_display'),
$content, // remember the one that was clicked
display_animation_enabled = false;
$('#container').delegate( '.clickable', 'click', function() {
display_animation_enabled = true;
clickables.removeClass('clickable');
if( $content ) { $content.hide(); }
$content = $('#' + this.id + '_content').show();
cycle();
});
display.find('p').hide();
display.find('button').click(function() {
display_animation_enabled = false;
clickables.addClass( 'clickable' );
if( $content ) { $content.hide(); }
});
function cycle() {
if( display_animation_enabled ) {
display.animate({width:300,height:300})
.animate({width:200,height:200}, cycle);
}
}
1028 * CSS *
div.box {
width: 50px;
height: 50px;
background: yellow;
margin: 10px;
}
div.clickable {
background: orange;
}
#content_display {
width: 200px;
height: 200px;
background: yellow;
}
#content_display > p {
margin: 10px;
color: blue;
}