jQuery відключити посилання


284

Хтось знає, як відключити посилання в jquery БЕЗ використання return false;?

Зокрема, те, що я намагаюся зробити, - це відключити посилання на елемент, здійснивши клацання по ньому за допомогою jquery, який запускає деякі речі, а потім повторно увімкнути це посилання, щоб у разі його повторного натискання воно працювало за замовчуванням.

Дякую. Дейв

ОНОВЛЕННЯ Ось код. Що потрібно зробити після застосування .expandedкласу, це повторне включення відключеного посилання.

$('ul li').click(function(e) {
    e.preventDefault();
    $('ul').addClass('expanded');
    $('ul.expanded').fadeIn(300);
    //return false;
});

7
Чому вимога не використовувати return return false? Використовуйте його, а потім видаліть обробник подій, коли він більше не застосовується (або покладіть у нього умовне для повернення різних значень залежно від стану згаданих "деяких речей").
Квентін

Ви просто намагаєтеся виконати попередню обробку до того, як посилання буде здійснено за тією ж дією кліку? тобто ви не пропонуєте два кліки, а скоріше посилання користувача, якісь дії відбуваються, посилання виконується?
Лазар

В іншому випадку ви можете пояснити, чому ви сприймаєте такий підхід, оскільки краще розуміння проблемного простору покращить відповіді.
Лазар

@lazarus, я пропоную 2 кліки за тим самим посиланням. 1, щоб зробити деякі речі спочатку, а потім 2-ю, щоб трактувати посилання як посилання.
davebowker

@daviddorward, До цих пір я намагався повернути помилкове, і це продовжується до другої частини моєї мети, тобто не дозволяє другому клацанню пройти. Якби ви могли написати короткий приклад, я був би дуже вдячний.
davebowker

Відповіді:


364
$('#myLink').click(function(e) {
    e.preventDefault();
    //do other stuff when a click happens
});

Це запобіжить поведінці гіперпосилань за замовчуванням, яка має відвідувати вказаний href.

З підручника jQuery :

Для кліку та більшості інших подій ви можете запобігти поведінці за замовчуванням - тут, перейшовши за посиланням на jquery.com, - зателефонувавши event.preventDefault () у обробці подій

Якщо ви хочете preventDefault()лише виконати певну умову (щось приховано, наприклад), ви можете перевірити видимість вашого ul із розширеним класом . Якщо воно видно (тобто не приховано), посилання має спрацьовувати як звичайне, оскільки оператор if не буде введено, і, таким чином, поведінка за замовчуванням не буде запобіжена:

$('ul li').click(function(e) {
    if($('ul.expanded').is(':hidden')) {
        e.preventDefault();
        $('ul').addClass('expanded');
        $('ul.expanded').fadeIn(300);
    } 
});

3
За допомогою jQuery 1.7+ ви можете використовувати ввімкнення та вимкнення: stackoverflow.com/questions/209029/…
Lance Cleveland

якщо він має href та onclick, це буде працювати $ ("# myLink"). attr ('onclick', '') .click (функція (e) {e.preventDefault ();});
Рональд Макдональд

реалізовано через ajax та jquery, я можу приховати href buy, який має зворотний дзвінок, щоб утримати скрепери від отримання цих посилань. Дивовижне дякую!
Сезар Біліх

у цій публікації найпростіший спосіб використання завантажувальної програми , сподівання допомагає.
shaijut

107

Спробуйте це:

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

EDIT-

З оновленого коду:

 var location= $('#link1').attr("href");
 $("#link1").removeAttr('href');
 $('ul').addClass('expanded');
 $('ul.expanded').fadeIn(300);
 $("#link1").attr("href", location);

3
Грати з href - це дуже приємно, оскільки це швидкий спосіб відключення посилання, яке робить дії через подію onclick. Дуже дуже розумно!
daitangio

солодкий метод, щоб браузер не додавав # в URI під час виконанняhref="#"
Abela,

65

Для інших, хто прийшов сюди через Google, як я - ось інший підхід:

css:
.disabled {
  color: grey; // ...whatever
}

jQuery:
$('#myLink').click(function (e) {
  e.preventDefault();
  if ($(this).hasClass('disabled'))
    return false; // Do something else in here if required
  else
    window.location.href = $(this).attr('href');
});

// Elsewhere in your code
if (disabledCondition == true)
  $('#myLink').addClass('disabled')
else
  $('#myLink').removeClass('disabled')

Пам'ятайте: не тільки це клас css

class = "стиль гудзика"

але і ці два

class = "кнопковий стиль відключений"

тож ви можете легко додавати та видаляти подальші класи з jQuery. Не потрібно торкатися href ...

Я люблю jQuery! ;-)


2
це передбачає, що посилання не має мети :)
dstarh

2
Замість того, щоб робити все це фантазії, чому б просто не здійснити onclick вище в домі, використовуйте on()для фільтрації всіх a.disabledпосилань і запобігання дефолту. Тоді все, що вам потрібно зробити, це ввімкнути / вимкнути клас відключених, і посилання буде оброблятись, коли "увімкнено".
CodeChimp

Немає потреби в "== true" - addClass ("вимкнено") працюватиме незалежно. if(disabledCondition)
Фокс Вілсон

1
@fwilson, хоча ви абсолютно правильні, для початківця програміста, це легше розібратися з == true. :)
карменізм

Якась конкретна причина не спростити це if ($(this).hasClass('disabled')) { e.preventDefault(); }?
Мир

58

Ось альтернативне рішення css / jQuery, яке я віддаю перевагу за його лаконічність та мінімізований сценарій:

css:

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

jQuery:

$('.disableAfterClick').click(function (e) {
   $(this).addClass('disabled');
});

7
Від Mozilla : "Попередження: Використання покажчикових подій у CSS для елементів, що не належать до SVG, є експериментальним. Ця функція була частиною специфікації проекту CSS3 UI, але через багато відкритих проблем перенесена на CSS4."
дуелінові маркери

1
Це добре врахування, але, здається, він працює добре в більшості сучасних браузерів.
Пітер ДеВіз

Можливо, ви захочете подумати про те, щоб прикувати .prop("tabindex", "-1");післяaddClass
Олег Гришко

19

Ви можете видалити клік для посилання, виконавши наступне;

$('#link-id').unbind('click');

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

$('#link-id').bind('click');

Не можна використовувати властивість "вимкнено" для посилань.


1
Легко включати та вимикати порівняно з іншими.
python1981

2
"Ви не можете використовувати властивість" вимкнено "для посилань." Цікаво, чому між кнопкою та посиланням для відключення немає послідовності. "інвалід" також повинен працювати для посилання. Це як би сказати, що для автомобіля Chevy ви повинні натиснути на педаль гальма, щоб зупинитися, але для цього іншого виробника автомобіля ви повинні використовувати цей важіль, розташований на даху.
eaglei22

14

Якщо ви йдете по маршруту href, можете зберегти його

Щоб відключити:

$('a').each(function(){
    $(this).data("href", $(this).attr("href")).removeAttr("href");
});

Потім знову ввімкніть, використовуючи:

$('a').each(function(){
    $(this).attr("href", $(this).data("href"));
});

В одному випадку мені довелося це зробити так, оскільки події клацання вже були пов'язані десь в іншому місці, і я не мав над цим контролю.


12

Я завжди використовую це в jQuery для відключення посилань

$("form a").attr("disabled", "disabled");

Ви також можете скористатися $("form a").attr("disabled", false);для того, щоб знову це було включено
Олександр Рихлицький

9

Приклад посилання html:

        <!-- boostrap button + fontawesome icon -->
        <a class="btn btn-primary" id="BT_Download" target="blank" href="DownloadDoc?Id=32">
        <i class="icon-file-text icon-large"></i>
        Download Document
        </a>

використовувати це в jQuery

    $('#BT_Download').attr('disabled',true);

додайте це до css:

    a[disabled="disabled"] {
        pointer-events: none;
    }

1
Я ніколи раніше не стикався з цим властивістю CSS, але для мене це, безумовно, найпростіший метод відключення гіперпосилання. Краса полягає в тому, що при видаленні класу, який містить pointer-events: noneвластивість, з елементів якоря, вони повертаються до того, що робили раніше, коли натискали. Отже, якщо вони були базовими гіперпосиланнями, вони повертаються до навігації до URL-адреси у своєму hrefатрибуті, і якщо у них встановлений обробник подій клацання, він знову стає активним. Набагато простіше, ніж збереження hrefзначень та обробників кліків.
Філіп Стратфорд

Мені подобається це рішення, воно є найпростішим.
Луїс

Із жменьки «рішень», коли нічого не вийшло (і майже відмовившись від цього маршруту), прийшов до цього дорогоцінного каміння . Це не суєтне рішення. І єдиний, який РЕАЛЬНО працює. Кудос.
користувач12379095

5

Мій фаворит у "оформленні замовлення для редагування товару та запобігання - дикі Західні кліки куди завгодно - під час оформлення замовлення"

$('a').click(function(e) {
    var = $(this).attr('disabled');
    if (var === 'disabled') {
        e.preventDefault();
    }
});

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

$('#actionToolbar .external').attr('disabled', true);

Приклад посилання після пожежі:

<a href="http://goo.gl" target="elsewhere" class="external" disabled="disabled">Google</a>

А тепер ви можете використовувати відключену власність для посилань

Ура!


3

Ви повинні знайти відповідь тут .

Дякуємо @Will та @Matt за це елегантне рішення.

jQuery('#path .to .your a').each(function(){
    var $t = jQuery(this);
    $t.after($t.text());
    $t.remove();
});


2

Просто запустіть речі, встановіть якийсь прапор, поверніть false. Якщо встановлено прапор - нічого не робіть.


Спробували це, встановивши клас, а потім зателефонувавши до цього класу пізніше, але поверніть помилкові переноси і запобігає виклику посилання.
davebowker

1

unbind()застаріло в jQuery 3, off()замість цього використовуйте метод:

$("a").off("click");

0

Я знаю, що це не з jQuery, але ви можете відключити посилання за допомогою простого css:

a[disabled] {
  z-index: -1;
}

HTML виглядав би так

<a disabled="disabled" href="/start">Take Survey</a>

0

Це працює для посилань, у яких вбудований атрибут onclick. Це також дозволяє пізніше видалити "повернути помилкове", щоб увімкнути це.

        //disable all links matching class
        $('.yourLinkClass').each(function(index) {
            var link = $(this);
            var OnClickValue = link.attr("onclick");
            link.attr("onclick", "return false; " + OnClickValue);
        });

        //enable all edit links
        $('.yourLinkClass').each(function (index) {
            var link = $(this);
            var OnClickValue = link.attr("onclick");
            link.attr("onclick", OnClickValue.replace("return false; ", ""));
        });

-2

Просто використовуйте $("a").prop("disabled", true);. Це дійсно відключить елемент de link. Потрібно бути prop("disabled", true). Не використовуйтеattr("disabled", true)

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