Як увімкнути або відключити якір за допомогою jQuery?


150

Як увімкнути або відключити якір за допомогою jQuery?


Дякуємо за всю вашу відповідь, все-таки вона не працює, тому можете, будь ласка, змусити її працювати з функцією document.ready
Senthil Kumar Bhaskaran

Це може допомогти, якщо ви опублікуєте фрагмент коду, який не працює.
Hooray Im Helping

Насправді моє кодування знаходиться в Rails, і моє кодування - <% = foo.add_associated_link ("Додати електронну пошту", @ project.email.build)%>, коли я візую його в браузер, я можу побачити електронну пошту, але я не можу її відключити навіть я спробував з кодуваннями, такими як e.preventDefault (), але безрезультатно
Senthil Kumar Bhaskaran,

Відповіді:


194

Щоб запобігти виконанню якоря за вказаними href, я б запропонував використовувати preventDefault():

// 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 відключити посилання


Я намагався з тими "attr", що він працює лише на елементі форми, а не на тезі Anchor.
Сентітіл Кумар Бхаскаран

1
@senthil - prevenDefault вважається "правильним" способом цього, дивіться мою редагування (посилання на інший Q + A)
karim79

Насправді моє кодування знаходиться в Rails, і моє кодування - <% = foo.add_associated_link ("Додати електронну пошту", @ project.email.build)%> коли я виводжу його в браузер, я можу побачити електронну пошту, але я не можу її відключити навіть я спробував із кодуваннями, такими як e.preventDefault (), але безрезультатно
Senthil Kumar Bhaskaran,

2
як повернути назад $('a.something').on("click", function (e) { e.preventDefault(); });?
ア レ ッ ク ス

2
Не згоден, використовуйте CSS "pointer-events: none;" натомість, як і в інших невмілих.
vitrilo

116

Додаток, над яким я зараз працюю, робить це у стилі CSS у поєднанні з JavaScript.

a.disabled { color:gray; }

Тоді, коли я хочу відключити посилання, я дзвоню

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

Потім у обробнику кліків для тега "thelink" я завжди запускаю перевірку спочатку

if ($('thelink').hasClass('disabled')) return;

6
Чи не повинен цей останній рядок говорити "повернути помилкове"?
Prestaul

1
Гарний дзвінок, Prestaul. Прив’язуючись до тега <a>, я використовую: <a href="wwhat" onclick="return disabledLink(this)"> .. тоді: функцію disabledLink (вузол) {if (dojo.hasClass (вузол, 'disabled') return false; dojo.addClass (вузол, 'disabled'); return true;} .. це дозволяє один раз натискати на посилання та дія (return true), а після цього не дозволяє дію (return false).
Neek

Зауважте, що в обробнику ви, ймовірно, повинні використовувати $ (this) замість $ ("thelink"), оскільки це може змінитися або користувач може таким чином легко скопіювати / вставити код.
Алексіс Вільке

2
Запропонуйте також додати вимкнути стиль "курсор: за замовчуванням".
Стюарт Хеллоуз

40

Я знайшов відповідь , який мені подобається набагато краще тут

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

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

Це дає вам вигляд, що елемент прив’язки стає нормальним текстом, і навпаки.



12

Я думаю, що приємнішим рішенням є встановлення відключеного атрибута даних та прив’язка до нього чека на клацання. Таким чином ми можемо тимчасово відключити якір до тих пір, поки напр. 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/


11

Вибрана відповідь - це не добре.

Використовуйте стиль CSS вказівника-події . (Як запропонував Рашад Аннара)

Див. MDN https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events . Його підтримують у більшості браузерів.

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

a[disabled], a[disabled]:hover {
   pointer-events: none;
   color: #e1e1e1;
}

Також з подіями вказівника вам не потрібно буде включати: навести курсор, оскільки це подія вказівника. Вам потрібно лише включити селектор [disabled].
Ларрі Дюк

10

Спробуйте рядки нижче

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

Coz, Навіть якщо ви вимкнете <a>тег, він hrefбуде працювати, тому його також потрібно видалити href.

Коли ви хочете включити, спробуйте нижче рядків

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

1
Це саме те, що мені було потрібно при використанні JQuery з ASP.net MVC ActionLink. Дякую!
eaglei22

8

Це так просто, як повернути помилкове;

колишній

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

або

jQuery("#menu a").click(function(){
   return false;
})


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

Якщо цей метод викликається, подія за замовчуванням подія не буде запущена.



4

Ви ніколи не вказували, як хотіли б їх відключити або що може спричинити відключення.

По-перше, ви хочете розібратися, як встановити значення відключеним, для цього ви б використали функції атрибутів JQuery , і щоб ця функція трапилася під час події , як клацання або завантаження документа.


1

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

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

Відповідь @ michael-meadows підкреслив мене до цього, але його все ще вирішували сценарії, коли ви все ще повинні / працюєте з jQuery / JS. У цьому випадку, якщо у вас є контроль над написанням самого html, просто x-ing тегу href - це все, що вам потрібно зробити, тому рішення - це чистий HTML!

Інші рішення без остаточного jQuery, які зберігають href, вимагають, щоб ви поставили # у href, але це призводить до того, що сторінка відскакує доверху, і ви просто хочете, щоб її старий звичайний вимкнено. Або залишити його порожнім, але залежно від веб-переглядача все ще робить такі речі, як стрибок на вершину, і це недійсний HTML відповідно до IDE. Але, мабуть, aтег є абсолютно дійсним HTML без HREF.

Нарешті, ви можете сказати: Гаразд, чому б просто не скинути тег взагалі, ніж? Оскільки aтег часто не вдається, тег використовується для цілей стилізації в рамках CSS або контролю, який ви використовуєте, як-от Пагінатор Bootstrap:

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


1

Тож, поєднавши відповіді вище, я придумав це.

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

$(".yourClass").addClass("disabled").click(function(e){ e.preventDefault(); 

0

Якщо вам не потрібно, щоб він поводився як прив'язний тег, то я б вважав за краще замінити його. Наприклад, якщо ваш якорний тег схожий

<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 рядки), а також семантично правильно (оскільки нам зараз не потрібне посилання, тому не повинно бути посилання)


0

Вимкнути або увімкнути будь-який елемент із відключеним властивістю.

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

// Enable
$( "#myAnchor" ).prop( "disabled", false );

Чому ця відповідь знищена? Він відповідає на питання "Як увімкнути або вимкнути якір за допомогою jQuery?"
RitchieD

Я вважаю, це тому, що посилання все ще відкривається при натисканні на якір.
Зомбая
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.