Отключить и включить все гиперссылки с помощью JQuery - PullRequest
6 голосов
/ 04 февраля 2010

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

$("a").click(function() { return false; });

Я не думаю, что это так просто, как просто установить значение true. ;)

Спасибо всем

Ответы [ 10 ]

18 голосов
/ 04 февраля 2010

Вместо того, чтобы связывать ваш обработчик "click" таким образом, сделайте это:

$('a').bind("click.myDisable", function() { return false; });

Тогда, когда вы захотите удалить этот обработчик, это просто:

$('a').unbind("click.myDisable");

Таким образом, вы избегаете путаницы с другими вещами, которые могут быть связаны с «щелчком». Если вы просто отмените «щелчок», вы отмените все, что связано с этим событием.

редактировать в 2014 году & mdash; способ связывания событий теперь с .on():

$('a').on('click.myDisable', function() { return false; });

Вероятно, было бы лучше сделать это:

$('a').on('click.myDisable', function(e) { e.preventDefault(); });

Чтобы отменить привязку:

$('a').off('click.myDisable');

Наконец, вы можете привязать обработчик к телу документа и иметь дело с <a> тегами, которые добавляются динамически:

$('body').on('click.myDisable', 'a', function(e) { e.preventDefault(); });

// to unbind

$('body').off('click.myDisable');
5 голосов
/ 04 февраля 2010

Попробуйте это:

// Better to use the live event handler here, performancewise
$('a').live('click', function() {... return false;});

// Now simply kill the binding like this
$('a').die('click');

прощай

4 голосов
/ 04 февраля 2010

Связывание и открепление требует некоторых затрат.

Другим решением было бы добавить класс, подобный disabled, а затем использовать hasClass('disabled'), чтобы проверить и посмотреть, должен ли он возвращать false.

$('a').addClass('disabled');
$('a').click(function() {
    if($(this).hasClass('disabled'))
        return false;
});
0 голосов
/ 13 июля 2016

Иначе, если вы строго хотите, чтобы URL также был недоступен, вы можете удалить атрибут href из тега a. Примерно так:

 $('a').removeAttr('href');

дополнительно изменение цвета текста и курсора на нем:

 $('a').css('color', '#333');
 $('a').hover(function () {
       $(this).css('cursor', 'not-allowed');
 );
0 голосов
/ 11 июня 2013

Или даже лучше, просто переключите display большого элемента с высоким z-index. В приведенном ниже примере div покрывает тело.

var link = document.getElementsByTagName('a')[2];
var noclick = document.getElementById('noclick');

link.onclick = function() {
  noclick.className = 'on';
}
#noclick {
  display: none;
  position: absolute;
  left: 0px;
  right: 0px;
  top: 0px;
  bottom: 0px;
  /* Make sure this floats over content */
  z-index: 100; 
}

#noclick.on {
  display: block;
}
<body>
  <div id="noclick"></div>
  <a href="#">one</a>
  <a href="#">two</a>
  <a href="#">three</a>
</body>
0 голосов
/ 04 февраля 2010
$(function(){


    $.myStopAnchor = function(){
      $stop = true;
    }

    $.myNoStopAnchor = function(){
      $stop = false;
    }

    $.myNoStopAnchor();

    $("a").click(function(ev) { 
       if ($stop){
         ev.stopPropagation()
       }
       return !$stop; 
    });

});
0 голосов
/ 04 февраля 2010

вы можете отменить привязку обработчика кликов:

$('a').unbind('click')
0 голосов
/ 04 февраля 2010
var disableLink = function(){ return false;};
$('a').bind('click', disableLink);

для восстановления:

$('a').unbind('click', dsiableLink);
0 голосов
/ 04 февраля 2010

Вы должны быть в состоянии отменить это.

$("a").unbind("click");
0 голосов
/ 04 февраля 2010

Вы хотите отменить привязку события: http://api.jquery.com/unbind/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...