jQuery bir bağlantıyı devre dışı bırak


284

Herkes kullanmadan jquery bir bağlantıyı devre dışı bırakmayı biliyor return false;mu?

Özellikle, yapmaya çalıştığım şey, bir öğenin bağlantısını devre dışı bırakmak, bazı şeyleri tetikleyen jquery kullanarak bir tıklama yapmak ve daha sonra tekrar tıklanırsa varsayılan olarak çalışması için bu bağlantıyı yeniden etkinleştirmektir.

Teşekkürler. Dave

GÜNCELLEME İşte kod. .expandedSınıf uygulandıktan sonra yapması gereken , devre dışı bırakılmış bağlantıyı yeniden etkinleştirmektir.

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

7
Neden iade yanlış kullanmama gereksinimi? Kullanın ve daha sonra artık uygulanmadığında olay işleyicisini silin (veya belirtilen "bazı şeylerin" durumuna bağlı olarak farklı değerler döndürmek için bir koşul koyun.)
Quentin

Bağlantı aynı tıklama işleminde izlenmeden önce yalnızca bazı ön işlemler yapmaya mı çalışıyorsunuz? yani iki tıklama önermiyorsunuz, bunun yerine kullanıcı tıklamasıyla bağlantı kuruyorsunuz, bazı işlemler oluyor, bağlantı izleniyor mu?
Lazarus

Aksi takdirde, sorunlu alanı daha iyi anlamak için neden bu yaklaşımı kullandığınızı açıklayabilir misiniz?
Lazarus

@lazarus, aynı bağlantıya 2 tıklama öneriyorum. 1 önce bazı şeyler yapmak için, sonra 2 bağlantıyı bir bağlantı olarak ele.
davebowker

@daviddorward, Şimdiye kadar yanlış dönüşü denedim ve hedefimin ikinci bölümüne geçiyor, yani 2. tıklamanın geçmesine izin vermiyor. Kısa bir örnek yazabilirseniz çok minnettar olurum.
davebowker

Yanıtlar:


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

Bu, belirtilen href'i ziyaret edecek bir köprünün varsayılan davranışını önleyecektir.

JQuery öğreticisinden :

Tıklama ve diğer birçok etkinlik için, varsayılan işleyiciyi (burada, jquery.com bağlantısını izleyerek), olay işleyicisindeki event.preventDefault () yöntemini çağırarak engelleyebilirsiniz.

Eğer isterseniz preventDefault()belli bir durum (bir şey örneğin gizlenir) yerine yalnızca, sen sınıfa ile ul görünürlüğünü test edebilir genişletilmiş . Görünürse (yani gizli değilse), if ifadesi girilmeyeceği için bağlantı normal şekilde tetiklenmelidir ve bu nedenle varsayılan davranış önlenmez:

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

3
JQuery 1.7+ ile açma / kapama kullanabilirsiniz: stackoverflow.com/questions/209029/…
Lance Cleveland

eğer bir href ve onclick varsa bu $ ("# myLink"). attr ('onclick', '') .click (function (e) {e.preventDefault ();});
Ronald McDonald

ajax ve jquery ile gerçekleştirilen ben sıyırıcılar bu bağlantıları almak için geri arama sahip bir href satın gizleyebilirsiniz. Harika teşekkürler!
Cesar Bielich

Bu yazı bootstrap kullanarak en kolay yolu vardır , umut yardımcı olur.
shaijut

107

Bunu dene:

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

DÜZENLE-

Güncellenmiş kodunuzdan:

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

3
Href ile oynamak çok güzel çünkü bir onclick olayı ile eylem yapan bir bağlantıyı devre dışı bırakmanın hızlı bir yolu. Çok çok akıllıca!
11:39

yaparken tarayıcının URI içine # eklemesini engellemek için tatlı bir yöntemhref="#"
Abela

65

Buraya benim gibi google üzerinden gelen diğerleri için - işte başka bir yaklaşım:

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')

Unutmayın: sadece bu bir css sınıfı değil

class = "buttonstyle"

aynı zamanda bu ikisi

class = "buttontyle devre dışı"

böylece jQuery ile kolayca başka sınıflar ekleyebilir ve kaldırabilirsiniz. Href dokunmaya gerek yok ...

JQuery seviyorum! ;-)


2
Bu, bağlantının hedefi olmadığını varsayar :)
dstarh

2
Tüm bu fanteziyi yapmak yerine, neden sadece dom'daki daha yüksek tıklamayı değil, on()tüm a.disabledbağlantıları filtrelemek ve varsayılanı önlemek için kullanın . Sonra tek yapmanız gereken devre dışı bırakılmış sınıfı açmak / kapatmak ve "etkin" olduğunda bağlantı kendini idare edecektir.
CodeChimp

"== true" gerekmez - addClass ('devre dışı') ne olursa olsun çalışır. if(disabledCondition)
Fox Wilson

1
@fwilson, tamamen haklı olmanıza rağmen, bir başlangıç ​​programcısı için ile anlaşılması daha kolaydır == true. :)
carmenism

Basitleştirmek için herhangi bir özel neden if ($(this).hasClass('disabled')) { e.preventDefault(); }?
Mir

58

İşte onun kıvamı ve simge durumuna küçültülmüş komut dosyası oluşturma için tercih ettiğim alternatif bir css / jQuery çözümü:

css:

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

jQuery:

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

7
Mozilla'dan : "Uyarı: SVG olmayan öğeler için CSS'de işaretçi olaylarının kullanımı deneyseldir. Eskiden CSS3 UI taslak belirtiminin bir parçasıydı, ancak birçok açık sorun nedeniyle CSS4'e ertelendi."
düello işaretleri

1
Bu iyi bir düşüncedir, ancak modern tarayıcıların çoğunda iyi çalışır.
Peter DeWeese

Sen zincirleme düşünebilirsiniz .prop("tabindex", "-1");sonraaddClass
Oleg Grishko

19

Aşağıdaki linke tıklayarak bağlantıyı kaldırabilirsiniz;

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

Bağlantıyı aşağıdaki yollarla yeniden etkinleştirebilirsiniz,

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

Bağlantılar için 'devre dışı' özelliğini kullanamazsınız.


1
Diğerlerine göre açılıp kapanması kolaydır.
python1981

2
"Bağlantılar için" devre dışı "özelliğini kullanamazsınız." Bir düğme ile devre dışı bırakma bağlantısı arasında neden tutarlılık olmadığını merak edin. "devre dışı" bir bağlantı için de çalışmalıdır. Bir Chevy araba için durdurmak için fren pedalına basmanız gerektiğini söylemek gibi, ancak bu diğer otomobil üreticisi için, çatıda bulunan bu kolu kullanmanız gerekir.
eaglei22

14

Href yoluna giderseniz, onu kaydedebilirsiniz

Devre dışı bırakmak için:

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

Ardından aşağıdakileri kullanarak yeniden etkinleştirin:

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

Bir durumda, bu şekilde yapmak zorunda kaldım çünkü tıklama olayları zaten başka bir yere bağlıydı ve üzerinde hiçbir kontrolüm yoktu.


12

Ben her zaman bağlantıları devre dışı bırakmak için jQuery kullanın

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

$("form a").attr("disabled", false);Tekrar etkinleştirmek için de kullanabilirsiniz
Alexander Ryhlitsky

9

html bağlantı örneği:

        <!-- 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>

bunu jQuery'de kullan

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

bunu css'e ekle:

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

1
Daha önce hiç bu CSS özelliğine rastlamamıştım, ama bu benim için bir köprüyü devre dışı bırakmanın en basit yöntemidir. Bunun güzelliği, pointer-events: noneözelliği içeren sınıfı bağlantı öğelerinden kaldırdığınızda, tıklatıldığında daha önce yaptıklarını yapmaya geri dönerler. Dolayısıyla, temel köprüler olsaydı, hrefözniteliklerindeki URL'ye gitmeye geri dönerler ve bir tıklama olayı işleyicisi ayarlanmışsa, bu tekrar etkin hale gelir. hrefDeğerleri ve tıklama işleyicilerini kaydetmekten çok daha basit .
Philip Stratford

Bu çözümü seviyorum, en basit çözüm.
louis

Hiçbir şey işe yaramadı (ve neredeyse bu rotayı bırakmadan), bir avuç "çözümler" dışında, bu gem geldi . Bu sorunsuz bir çözüm. Ve GERÇEKTEN ÇALIŞAN tek kişi. Kudos.
user12379095

5

"Bir öğeyi düzenlemek ve bir kasadayken vahşi vahşi batı tıklamalarını herhangi bir yere önlemek için ödeme" işlevim

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

Bu nedenle, ikinci bir eylem araç çubuğundaki tüm harici bağlantıların yukarıda açıklandığı gibi "düzenleme modu" ndayken devre dışı bırakılmasını istiyorsanız, düzenleme işlevine ekleyeceğim

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

Yangından sonra bağlantı örneği:

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

Ve şimdi bağlantılar için devre dışı bırakılmış özelliği kullanabilirsiniz

Şerefe!


3

Burada cevabını bulmalısın .

Bu zarif çözüm için @Will ve @Matt'a teşekkürler.

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

3

bağlantıyı istediğiniz gibi gizleyebilir ve gösterebilirsiniz

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

2

Sadece bir şeyler tetikleyin, bazı bayraklar ayarlayın, yanlış döndürün. Bayrak ayarlanmışsa - hiçbir şey yapmayın.


Bir sınıf ayarlayıp daha sonra bu sınıfı daha sonra çağırarak denediniz ancak false döndürür ve bağlantının çağrılmasını engeller.
davebowker

1

unbind()kullanımdan kaldırıldı jQuery 3, off()bunun yerine yöntemi kullanın:

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

0

Bu jQuery ile olmadığını biliyorum ama bazı basit css ile bir bağlantıyı devre dışı bırakabilirsiniz:

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

HTML şöyle görünür

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

0

Bu, onclick özniteliğini satır içine ayarlanmış bağlantılar için çalışır. Bu, daha sonra etkinleştirmek için "return false" öğesini daha sonra kaldırmanıza da olanak tanır.

        //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

Sadece kullan $("a").prop("disabled", true);. Bu, bağlantı öğesini gerçekten devre dışı bırakacaktır. Olması gerekiyor prop("disabled", true). Kullanmaattr("disabled", true)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.