2009-06-09 4 views
256

Кто-нибудь знает, как отключить ссылку в jquery БЕЗ использования return false;?jQuery отключить ссылку

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

Спасибо. Dave

UPDATE Вот код. Что нужно сделать после того, как класс .expanded был применен, это снова включить отключенную ссылку.

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

Почему требование не использовать return false? Используйте его, а затем удалите обработчик событий, когда он больше не применяется (или помещает в него условное выражение для возврата разных значений в зависимости от состояния упомянутого «некоторого материала»). – Quentin

+0

Вы просто пытаетесь выполнить предварительную обработку до того, как будет следовать ссылка на одно действие с кликом? т. е. вы не предлагаете два клика, а скорее клики пользователей, некоторые действия происходят, ссылка сопровождается? – Lazarus

+0

В противном случае вы можете объяснить, почему вы используете этот подход, поскольку лучшее понимание проблемного пространства улучшит ответы. – Lazarus

ответ

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

Это предотвратит поведение по умолчанию гиперссылки, которая предназначена для посещения указанного href.

С JQuery tutorial:

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

Если вы хотите preventDefault() только, если определенное условие выполняется (что-то скрыто, например), вы можете проверить видимость вашего ул с классом расширен. Если это видно (т.е. не скрыт) ссылка должна стрелять в обычном режиме, так как если не будет введено заявление, и, таким образом, не будет предотвращено по умолчанию:

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

С jQuery 1.7+ вы можете использовать вкл/выкл: http://stackoverflow.com/questions/209029/best-way-to-remove-an-event-handler-in-jquery –

+0

, если у него есть href и onclick это будет работать $ ("# myLink"). attr ('onclick', '') .click (функция (e) { e.preventDefault(); }); –

+0

, реализованный через ajax и jquery, я могу скрыть покупку href с обратным вызовом, чтобы сохранить скребки от получения этих ссылок. Удивительное спасибо! –

2

Просто запускайте материал, установите флаг, верните false. Если флаг установлен, ничего не делайте.

+0

Попробовали это, установив класс, затем вызывающий этот класс позже, но возвращающий false, и предотвращает вызов ссылки. – davebowker

95

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

$("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

+0

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

58

Для тех, кто пришел сюда через 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

класс = "ButtonStyle"

, но и эти два

class = "buttonstyle disabled"

, поэтому вы можете легко добавлять и удалять дополнительные классы с помощью jQuery. Не нужно касаться href ...

Я люблю jQuery! ;-)

+2

это предполагает, что ссылка не имеет цели :) – dstarh

+2

Вместо того, чтобы делать все это фантазии, почему бы просто не наклеить onclick выше в dom, используйте 'on()' для фильтрации всех ссылок 'a.disabled' и предотвращения по умолчанию. Тогда все, что вам нужно сделать, это включить/выключить отключенный класс, и ссылка будет обрабатывать себя, когда «включена». – CodeChimp

+0

Нет необходимости в "== true" - addClass ('disabled') будет запускаться независимо. 'if (disabledCondition)' –

44

Вот альтернативный сервер решение/JQuery, что я предпочитаю для его краткость и свернутое сценариев:

CSS:

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

JQuery:

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

[From Mozilla] (https://developer.mozilla.org/en/CSS/pointer-events): «Предупреждение: использование указателей-событий в CSS для элементов, отличных от SVG, является экспериментальным. быть частью спецификации спецификации пользовательского интерфейса CSS3, но из-за многих открытых проблем был отложен до CSS4.« –

+1

Это хорошее отношение, но это хорошо работает в большинстве современных браузеров. –

+1

Это совершенно здорово +1. Желаю, чтобы я мог его использовать, но мне нужно поддерживать IE ... – Ziggy

3

Вы должны найти вы отвечаете here.

Спасибо @With и @Matt за это элегантное решение.

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

Вы можете удалить требуемый файл нажатием ссылки;

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

Вы можете повторно включить ссылку на следующее,

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

Вы не можете использовать свойство для ссылки 'инвалид'.

+0

Легко переключаться вкл. и выкл. по сравнению с другими. – python1981

+1

«Вы не можете использовать свойство« disabled »для ссылок.« Подумайте, почему между кнопкой и связью для отключения нет никакой согласованности ». инвалид "должен работать и на ссылку. Это как сказать, что для автомобиля Chevy вы должны нажать на педаль тормоза, чтобы остановить, но для этого другого производителя автомобилей вы должны использовать этот рычаг, расположенный на крыше. – eaglei22

4

Мой любимчика в «кассе для редактирования элемента и предотвратить -Wild дикого запада щелчков anywhere- в то время как в кассе» функции

$('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> 

И теперь вы можете использовать отключенное свойство для ссылок

Будьте здоровы!

5

Я всегда использую это в JQuery для инвалидизирующих ссылок

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

Если вы идете HREF маршрут, вы можете сохранить его

Чтобы отключить:

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

Затем повторно включить с помощью :

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

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

1

вы можете просто скрыть и показать ссылку, как вам нравится

$(link).hide(); 
$(link).show(); 
0

Я знаю, что это не с JQuery, но вы можете отключить связь с некоторыми простыми CSS:

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

в HTML будет выглядеть так:

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

Просто используйте $("a").prop("disabled", true);. Это действительно отключит элемент ссылки. Нужно быть prop("disabled", true). Не использовать attr("disabled", true)

Смежные вопросы