Как предотвратить нажатие на другую кнопку при первом нажатии...
Пример http://jsfiddle.net/C5AVH/3/
$(function(){
$('.vote_like').one('click',function(){
$('.vote_dislike').removeClass('vote_dislike');
alert('Done!')
});
$('.vote_dislike').one('click',function(){
$('.vote_like').removeClass('vote_like');
alert('Done!');
});
});
<a href="#" class="vote_like">Like</a> -
<a href="#" class="vote_dislike">Dislike</a>
Когда вы нажимаете кнопку "Мне нравится", я хочу отключить кнопку "Не нравится" и наоборот...
Я пытаюсь удалить класс, но кажется, что не работает...
$('.vote_like').removeClass('vote_like');
Вы можете удалить обработчик кликов
$(function () {
$('.vote_like').one('click.like', function () {
$('.vote_dislike').off('click.like');
console.log('like!')
});
$('.vote_dislike').one('click.like', function () {
$('.vote_like').off('click.like');
console.log('dislike!');
});
});
Демо: скрипка
Поскольку вы прикрепляете обработчик .one
к каждой кнопке, он все равно будет выполняться не более одного раза в соответствии с документами jquery. Чтобы предотвратить щелчок, вы должны удалить обработчик после щелчка.
$('.vote_like').one('click',function(){
$('.vote_dislike').off();
alert('Done!')
});
$('.vote_dislike').one('click',function(){
$('.vote_like').off();
alert('Done!');
});
});
<a href="#" class="vote_like">Like</a> -
<a href="#" class="vote_dislike">Dislike</a>
Но еще лучше, почему бы не просто привязать one
обработчика к обоим элементам и проверить, на что было нажато:
$(function(){
$('.vote_like,.vote_dislike').one('click',function(){
if($(this).is('.vote_like')){
//set data for like
}
else{
//set data for dislike
}
//make ajax call
});
У якорей нет способа их отключить, поэтому вам нужно либо удалить привязку, либо установить логическое значение в вашем javascript для отслеживания, если он был нажат.
Или вы можете преобразовать их в реальные элементы button
, играть с disabled
состоянием.
Или вы можете использовать jquery для добавления атрибутов пользовательских data
в якорь для отслеживания, если он "отключен",
Можно использовать один обработчик для обеих кнопок и удалить в нем обработчик кликов для обоих
var btns=$('.vote_like, .vote_dislike').on('click',function(e){
e.preventDefault();
var isLikeBtn=$(this).is('.vote_like');
/* remove click handler for both, remove class from other button */
btns.off('click').not(this).removeClass( isLikeBtn ? 'vote_dislike' : 'vote_like');
});
Поскольку использование off
на обоих будет эквивалентно использованию one
$(function(){
$('.vote_like, .vote_dislike').on('click',function(){
$(this).siblings('.vote_like, .vote_dislike').add($(this)).prop('disabled',true);
if ($(this).hasClass('vote_like')) {
/* Do like things */ alert('like');
}else{
/* Do dislike things */ alert('dislike');
}
});
});