2013-03-12 4 views
0

У меня есть проблема, чтобы отключить мой якорь при его нажатии.Отключить якорь с onclick

HTML:

<a href='#' data-bind='click: clickActivateSpatialSearch' id='draw_polygon'> 
<i class='polygon_mark'></i> 
</a> 
<a href='#' data-bind='click: clickActivateSpatialSearchBox' id='draw_box'> 
<i class='square_mark'></i> 
</a> 

JQuery

$('.square_mark').click(function() { 
     if(!$(this).hasClass('active')) { 
      $(this).addClass('active'); 
      $('.polygon_mark').off('click', disabler); 
     } else { 
      $(this).removeClass('active'); 
      $('.polygon_mark').on('click', disabler); 
     } 
    }); 
    $('.polygon_mark').click(function() { 
     if(!$(this).hasClass('active')) { 
      $(this).addClass('active'); 
      $('.square_mark').off('click', disabler); 
     } else { 
      $(this).removeClass('active'); 
      $('.square_mark').on('click', disabler); 
     } 
    }); 
}); 

Функция:

disabler: function(event) { 
    event.preventDefault(); 
    return false; 
}, 

Функциональность для изменения классов работают хорошо, но то, что я хотел бы добавить в это, ОС, когда якорь # 1, это отключает другой якорь, и когда я нажимаю его еще раз, я бы хотел, чтобы он повторное закрепление якоря, а также наоборот, но для якоря № 2.

Я пробовал делать что-то подобное, но я не могу заставить его работать, не понимая его полностью.

+0

Что именно не работает? Какие кнопки вы нажимаете и что происходит не так, как ожидалось? – Bergi

ответ

3

Сделайте это и добавьте класс disable в ваш css.

$('.square_mark').click(function() { 
     $(this).toggleClass('active'); 
     $('.polygon_mark').toggleClass("disabled"); 
}); 

$('.polygon_mark').click(function() { 
     $(this).toggleClass('active'); 
     $('.square_mark').toggleClass("disabled"); 
}); 

Это должно сделать tric.

.disabled { 
    pointer-events: none; 
    cursor: default; 
} 

Edit: пример на jsfiddle: http://jsfiddle.net/uKCYN/

И если вам нужно проверить для активного класса, чтобы сделать что-то еще вы можете закодировать это так:

$('.square_mark').click(function() { 
    if(!$(this).hasClass('active')) 
     $(this).addClass('active'); 
    else 
     $(this).removeClass('active'); 
    $('.polygon_mark').toggleClass("disabled"); 
}); 

$('.polygon_mark').click(function() { 
    if(!$(this).hasClass('active')) 
     $(this).addClass('active'); 
    else 
     $(this).removeClass('active'); 
    $('.square_mark').toggleClass("disabled"); 
}); 

и добавить ваш дополнительный материал в предложениях if.

+0

Мне понравилось, что вы сказали, но я не хочу удалять один из классов, вы можете увидеть скрипку для вас, чтобы увидеть http://jsfiddle.net/ZHqx5/ – WeeklyDad

+0

вам не нужно дважды переключать код ... так как он делает действие в обоих направлениях ... если элемент имеет этот класс, он удаляет его, если он его не добавляет. Посмотрите на скрипку здесь http://jsfiddle.net/uKCYN/ –

+0

http://jsfiddle.net/ZHqx5/1/ Я попробовал, но ничего не случилось, он все еще навязал команду щелчка, хотя я уже нажал другую один. – WeeklyDad

1

Просто измените функцию обработчика, как это и попробуйте еще раз:

// handler function 
function disabler(event) { 
    event.preventDefault(); 
    console.log('item anchor clicked'); 
} 
Смежные вопросы