Запретить нажатие на другую кнопку jquery

0

Как предотвратить нажатие на другую кнопку при первом нажатии...

Пример 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');
Теги:

5 ответов

2
Лучший ответ

Вы можете удалить обработчик кликов

$(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!');
    });
});

Демо: скрипка

  • 0
    Это все равно потребует от вас обработки клика, потому что он является якорем и будет делать то, что вы не хотите. Пока вы отменяете это, что-то должно быть сделано. Вам также придется перерегистрировать события, если вы хотите разрешить переключение.
  • 0
    Можно по-прежнему заставить якоря возвращать false при щелчке без пространства имен, нет?
Показать ещё 1 комментарий
1

Поскольку вы прикрепляете обработчик .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
   });
  • 0
    потому что я вызываю функцию ajax после нажатия, чем данные хранятся в базе данных с php ...
  • 1
    Это нормально, вы можете контролировать, какие данные вы хотите сохранить внутри функции, я обновил свой пост
0

У якорей нет способа их отключить, поэтому вам нужно либо удалить привязку, либо установить логическое значение в вашем javascript для отслеживания, если он был нажат.

Или вы можете преобразовать их в реальные элементы button, играть с disabled состоянием.

Или вы можете использовать jquery для добавления атрибутов пользовательских data в якорь для отслеживания, если он "отключен",

0

Можно использовать один обработчик для обеих кнопок и удалить в нем обработчик кликов для обоих

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

0

демонстрация

$(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');
        }
    });
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню