Как включить или отключить привязку с помощью jQuery?

Как включить или отключить привязку с помощью jQuery?


person Senthil Kumar Bhaskaran    schedule 22.07.2009    source источник
comment
Спасибо за весь ваш ответ, он все еще не работает, поэтому не могли бы вы заставить его работать с функцией document.ready   -  person Senthil Kumar Bhaskaran    schedule 22.07.2009
comment
Это может помочь, если вы опубликуете фрагмент кода, который не работает.   -  person Hooray Im Helping    schedule 22.07.2009
comment
На самом деле я пишу в Rails, и я кодирую ‹% = foo.add_associated_link ('Add email', @ project.email.build)%›, когда я визуализирую его в браузере, я вижу письмо, но не могу его отключить, даже если пробовал с кодированием, таким как e.preventDefault (), но безрезультатно   -  person Senthil Kumar Bhaskaran    schedule 23.07.2009


Ответы (15)


Чтобы якорь не следовал за указанным href, я бы предложил использовать _2 _ :

// jQuery 1.7+
$(function () {
    $('a.something').on("click", function (e) {
        e.preventDefault();
    });
});

// jQuery < 1.7
$(function () {
    $('a.something').click(function (e) {
        e.preventDefault();
    });

    // or 

    $('a.something').bind("click", function (e) {
        e.preventDefault();
    });
});

Видеть:

http://docs.jquery.com/Events/jQuery.Event#event.preventDefault.28.29

Также см. Предыдущий вопрос о SO:

jQuery отключить ссылку

person karim79    schedule 22.07.2009
comment
Я пробовал с этими attr, он работает только с элементом формы, а не с тегом Anchor. - person Senthil Kumar Bhaskaran; 22.07.2009
comment
@senthil - preventDefault считается `` правильным '' способом сделать это, см. мою правку (ссылка на другой вопрос + ответ) - person karim79; 22.07.2009
comment
На самом деле я пишу в Rails, и я кодирую ‹% = foo.add_associated_link ('Add email', @ project.email.build)%›, когда я визуализирую его в браузере, я вижу письмо, но не могу его отключить, даже если пробовал с кодированием, таким как e.preventDefault (), но безрезультатно - person Senthil Kumar Bhaskaran; 23.07.2009
comment
как мне отменить $('a.something').on("click", function (e) { e.preventDefault(); });? - person アレックス; 23.06.2014
comment
Не согласен, используйте CSS-указатель-события: нет; вместо этого, как и в других ответах. - person vitrilo; 02.03.2016
comment
Как нам снова включить это? - person mapmalith; 23.10.2017

Приложение, над которым я сейчас работаю, использует стиль CSS в сочетании с javascript.

a.disabled { color:gray; }

Затем, когда я хочу отключить ссылку, я вызываю

$('thelink').addClass('disabled');

Затем в обработчике кликов для тега thelink я всегда сначала проверяю

if ($('thelink').hasClass('disabled')) return;
person AgileJon    schedule 22.07.2009
comment
Разве в последней строке не должно быть сказано return false ;? - person Prestaul; 14.10.2010
comment
Хороший звонок, Престол. При привязке к тегу ‹a› я использую: ‹a href=whatever onclick=return disableLink(this)› .. затем: function disableLink (node) {if (dojo.hasClass (node, 'disabled') return false; dojo.addClass (node, 'disabled'); return true;} .. это позволяет щелкнуть ссылку один раз и выполнить действие (вернуть true) и после этого не разрешить действие (возвращает false). - person Neek; 11.02.2012
comment
Обратите внимание, что в обработчике вам, вероятно, следует использовать $ (this) вместо $ (thelink), поскольку это может измениться, или пользователь может легко скопировать / вставить код. - person Alexis Wilke; 09.03.2014
comment
Предлагаем вам также добавить к отключенному стилю «курсор: по умолчанию». - person Stuart Hallows; 28.07.2014

Я нашел ответ, который мне больше нравится здесь

Выглядит так:

$(document).ready(function(){
    $("a").click(function () { 
        $(this).fadeTo("fast", .5).removeAttr("href"); 
    });
});

Включение потребует установки атрибута href

$(document).ready(function(){
    $("a").click(function () { 
        $(this).fadeIn("fast").attr("href", "http://whatever.com/wherever.html"); 
    });
});

Это создает впечатление, что элемент привязки становится обычным текстом, и наоборот.

person Michael Meadows    schedule 17.09.2010

Я думаю, что более приятным решением является установка атрибута disabled data и привязка проверки для него при нажатии. Таким образом, мы можем временно отключить привязку до тех пор, пока, например, javascript завершается вызовом ajax или некоторыми вычислениями. Если мы его не отключим, то можем быстро щелкнуть по нему несколько раз, что нежелательно ...

$('a').live('click', function () {
    var anchor = $(this);

    if (anchor.data("disabled")) {
        return false;
    }

    anchor.data("disabled", "disabled");

    $.ajax({
        url: url,
        data: data,
        cache: false,
        success: function (json) {
            // when it's done, we enable the anchor again
            anchor.removeData("disabled");
        },
        error: function () {
             // there was an error, enable the anchor
            anchor.removeData("disabled");
        }
    });

    return false;
});

Я сделал пример jsfiddle: http://jsfiddle.net/wgZ59/76/

person Michal B.    schedule 21.03.2012

Неправильный выбранный ответ.

Используйте стиль CSS указатель-события. (Как предложил Рашад Аннара)

См. MDN https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events. Поддерживается в большинстве браузеров.

Простое добавление атрибута disabled к привязке выполнит свою работу, если у вас есть глобальное правило CSS, подобное следующему:

a[disabled], a[disabled]:hover {
   pointer-events: none;
   color: #e1e1e1;
}
person vitrilo    schedule 02.03.2016
comment
Также с событиями указателя вам не нужно включать состояние: hover, поскольку это событие указателя. Вам нужно только включить селектор [disabled]. - person Larry Dukek; 15.12.2016

Попробуйте следующие строки

$("#yourbuttonid").attr("disabled", "disabled");
$("#yourbuttonid").removeAttr("href");

Coz, даже если вы отключите <a> тег, href будет работать, поэтому вы также должны удалить href.

Если вы хотите включить, попробуйте строки ниже

$("#yourbuttonid").removeAttr("disabled");
$("#yourbuttonid").attr("href", "#nav-panel");
person Victor AJ    schedule 05.08.2014
comment
Это именно то, что мне нужно при использовании JQuery с ASP.net MVC ActionLink. Спасибо! - person eaglei22; 28.01.2016

$('#divID').addClass('disabledAnchor');

В файле css

.disabledAnchor a{
       pointer-events: none !important;
       cursor: default;
       color:white;
}
person Rashad Valliyengal    schedule 16.08.2015

Это так же просто, как return false;

ex.

jQuery("li a:eq(0)").click(function(){
   return false;
})

or

jQuery("#menu a").click(function(){
   return false;
})
person kim edgard    schedule 22.06.2010

$("a").click(function(event) {
  event.preventDefault();
});

Если этот метод вызывается, действие по умолчанию для события не запускается.

person Mohssen Beiranvand    schedule 18.12.2010

Если вы пытаетесь заблокировать любое взаимодействие со страницей, возможно, стоит взглянуть на плагин jQuery BlockUI

person Sam Hasler    schedule 22.07.2009

Вы никогда не указали, как вы хотите, чтобы они были отключены, или что могло вызвать отключение.

Во-первых, вы хотите выяснить, как установить значение disabled, для этого вы должны использовать функции атрибутов JQuery, и эта функция должна выполняться в событии , например нажмите или загрузка документа.

person Sneakyness    schedule 22.07.2009

Для ситуаций, когда вы должны поместить текст или HTML-контент в тег привязки, но вы просто не хотите, чтобы при щелчке по этому элементу выполнялись какие-либо действия (например, когда вы хотите, чтобы ссылка пагинатора находилась в отключенном состоянии, потому что она текущую страницу), просто вырежьте href. ;)

<a>3 (current page, I'm totally disabled!)</a>

Ответ @ michael -adows подсказал мне об этом, но он все еще рассматривал сценарии, в которых вам все еще нужно / работать с jQuery / JS. В этом случае, если у вас есть контроль над написанием самого html, просто x-вставьте тег href - это все, что вам нужно сделать, поэтому решение - чистый HTML!

Другие решения без jQuery Finagling, которые сохраняют href, требуют, чтобы вы поместили # в href, но это заставляет страницу подпрыгивать наверх, и вы просто хотите, чтобы она была просто отключена. Или оставив его пустым, но в зависимости от браузера, который по-прежнему выполняет такие действия, как переход наверх, и это недопустимый HTML в соответствии с IDE. Но очевидно, что тег a является полностью допустимым HTML без HREF.

Наконец, вы можете сказать: Хорошо, а почему бы просто не сбросить тег a? Поскольку часто вы не можете этого сделать, тег a используется для стилизации в CSS-фреймворке или элементе управления, который вы используете, например, пагинатор Bootstrap:

http://twitter.github.io/bootstrap/components.html#pagination

person Nicholas Petersen    schedule 20.05.2013

Итак, комбинация ответов выше, я придумал это.

a.disabled { color: #555555; cursor: default; text-decoration: none; }

$(".yourClass").addClass("disabled").click(function(e){ e.preventDefault(); 
person LawMan    schedule 23.09.2015

Если вам не нужно, чтобы он работал как тег привязки, я бы предпочел вообще заменить его. Например, если ваш тег привязки похож на

<a class="MyLink" href="http://www.google.com"><span>My</span> <strong>Link</strong></a>

затем с помощью jquery вы можете сделать это, когда вам нужно отобразить текст вместо ссылки.

var content = $(".MyLink").text(); // or .html()
$(".MyLink").replaceWith("<div>" + content + "</div>")

Таким образом, мы можем просто заменить тег привязки тегом div. Это намного проще (всего 2 строки) и семантически правильно (потому что сейчас нам не нужна ссылка, поэтому не должно быть ссылки)

person adeel41    schedule 29.09.2014

Отключить или включить любой элемент с отключенным свойством.

// Disable 
$("#myAnchor").prop( "disabled", true );

// Enable
$( "#myAnchor" ).prop( "disabled", false );
person RitchieD    schedule 08.02.2016
comment
Почему этот ответ отклонен? Он отвечает на вопрос, как включить или отключить привязку с помощью jQuery? - person RitchieD; 08.03.2018
comment
Я считаю, что это потому, что ссылки все еще открываются при нажатии на якорь. - person Zombaya; 15.05.2018