Onclick çalıştırılırsa HREF'i nasıl devre dışı bırakabilirim?


98

Hem HREF ve hem deONCLICK nitelikleri ayarlanmış bir çapa var . Tıklanırsa ve Javascript etkinleştirilirse, yalnızca yürütmesini ONCLICKve yok saymasını istiyorum HREF. Benzer şekilde, Javascript devre dışı bırakılırsa veya desteklenmiyorsa, HREFURL'yi takip etmesini ve yok saymasını istiyorum ONCLICK. Aşağıda, JS'yi çalıştıracak ve bağlantıyı eşzamanlı olarak izleyecek olan (genellikle JS çalıştırılır ve ardından sayfa değişir) yaptığım bir örnek bulunmaktadır:

<A HREF="http://example.com/no-js-login" ONCLICK="yes_js_login()">Log in</A>

bunu yapmanın en iyi yolu nedir?

Bir Javascript cevabı umuyorum, ancak çalıştığı sürece herhangi bir yöntemi kabul edeceğim, özellikle de bu PHP ile yapılabiliyorsa. " Javascript onclick işlevi bitmeden önce bir href bağlantısı çalıştırıyor ve sayfayı yeniden yönlendiriyor " ifadesini okudum , ancak yalnızca geciktiriyor HREF, ancak tamamen devre dışı bırakmıyor. Ayrıca çok daha basit bir şey arıyorum.


4
Birini href ile diğeri olmadan sabitlemek için kullanırdım. Sayfa yüklemesinde javascript'in etkin olup olmadığını kontrol edin, eğer doğru bağlantı varsa diğerini gösterir.
ewein

1
@ewein Neden? Bu, basit bir özellik için çok fazla işaretleme gibi geliyor.
Ben Leggiero

Yanıtlar:


61

onclickÖznitelikte önce return koyarsanız, ilk düzenlenmemiş çözümü kullanabilirsiniz :

<a href="https://example.com/no-js-login" onclick="return yes_js_login();">Log in</a>

yes_js_login = function() {
     // Your code here
     return false;
}

Örnek: https://jsfiddle.net/FXkgV/289/


1
Bunun ne kadar temiz olduğunu seviyorum! Ancak, kabul edilen çözüm bana
HREF'in

Geçtiğimiz birkaç yıl içinde fikrimi değiştirdim; bu daha iyi bir çözüm
Ben Leggiero

Ne kadar sağlıklı!
DrunkDevKek

Ancak bu JSX react ile çalışmıyor. Bu işe yarayacak mı?
Coder

1
bu çok zaman kazandırdı.
Mark Lozano

61
    yes_js_login = function() {
         // Your code here
         return false;
    }

Yanlış döndürürseniz, varsayılan eylemi engellemelidir (href'e gitme).

Düzenleme: Maalesef işe yaramıyor, bunun yerine aşağıdakileri yapabilirsiniz:

<a href="http://example.com/no-js-login" onclick="yes_js_login(); return false;">Link</a>

1
Düzenlenen yanıt, asıl bağlantıyı kaldırdığı için soruyu yanıtlamaz.
Itai Bar-Haim

12
alternatif olarak kullanımı onclick="return yes_js_login();"ile yes_js_logindönenfalse
Uwe Kleine-König

1
@cgogolin cevabımı gör.
Gabe Rogan

Hala sıkışmış herkes bu satırı ekleyerek olabilir içinevent.stopImmediatePropagation()
didxga

35

Basitçe devre dışı varsayılan tarayıcı davranışı kullanarak preventDefaultve geçiş eventHTML'nizdeki.

<a href=/foo onclick= yes_js_login(event)>Lorem ipsum</a>

yes_js_login = function(e) {
  e.preventDefault();
}

1
dönüş yanlış polimerde işe yaramadı ... yukarıdaki çözüm işe yaradı ... Teşekkürler
Paras Sachapara

16
<a href="http://www.google.com" class="ignore-click">Test</a>

jQuery ile:

<script>
    $(".ignore-click").click(function(){
        return false;
    })
</script>

JavaScript ile

<script>
        for (var i = 0; i < document.getElementsByClassName("ignore-click").length; i++) {
            document.getElementsByClassName("ignore-click")[i].addEventListener('click', function (event) {
                event.preventDefault();
                return false;
            });
        }
</script>

Sınıfı .ignore-clickistediğiniz kadar öğeye atarsınız ve bu öğelere yapılan tıklamalar göz ardı edilir


Bu harika bir çözüm! Bunu, tıklandığında bir sözde sınıfın .btn-loadingtıklanan bağlantıya eklendiğini ve başarılı olursa, bir onay işareti (hata durumunda bir X) yükleme animasyonunun yerini alan düğmeler için kullandım . Bazı durumlarda (hem başarı hem de hata için) düğmenin tekrar tıklanmasını istemiyorum, bunu kullanarak $(elemnent).addClass('disabled')zarif bir şekilde aradığım işlevselliği basit ve kolay bir şekilde elde edebilirim !
Matthew Mathieson

14

Bu basit kodu kullanabilirsiniz:

<a href="" onclick="return false;">add new action</a><br>

5

Aşağıdaki gibi bir etkinlik parametresi iletirseniz daha basittir:

<a href="#" onclick="yes_js_login(event);">link</a>
function yes_js_login(e) {
    e.stopImmediatePropagation();
}

2
Bu benim için çalışmıyor. E.preventDefault () kullanmalıyım
Milan Simek

2

Bu yardımcı olabilir. JQuery gerekmez

<a href="../some-relative-link/file" 
onclick="this.href = 'https://docs.google.com/viewer?url='+this.href; this.onclick = '';" 
target="_blank">

Bu kod şunları yapar: İlgili bağlantıyı Google Doküman Görüntüleyici'ye iletin

  1. Çapanın tam bağlantı sürümünü şu şekilde edinin: this.href
  2. bağlantıyı yeni pencerede açın.

Yani sizin durumunuzda bu işe yarayabilir:

<a href="../some-relative-link/file" 
onclick="this.href = 'javascript:'+console.log('something has stopped the link'); " 
target="_blank">

1

Alternatif olarak normal bir URL'yi veya javascript çağrısını işleyen öğe için bir şablona ihtiyacım olduğu ve js işlevinin çağıran öğeye bir başvuruya ihtiyaç duyduğu bir durumu çözdüm. Javascript'te "bu" yalnızca bir form öğesi, örneğin bir düğme bağlamında öz referans olarak çalışır. Bir düğme istemedim, sadece normal bir bağlantının görünümünü.

Örnekler:

<a onclick="http://blahblah" href="http://blahblah" target="_blank">A regular link</a>
<a onclick="javascript:myFunc($(this));return false" href="javascript:myFunc($(this));"  target="_blank">javascript with self reference</a>

Href ve onClick öznitelikleri aynı değerlere sahip, ancak bir javascript çağrısı olduğunda onClick'e "yanlış döndür" ekledim. Çağrılan işlevde "yanlış döndür" olması işe yaramadı.


neden iki tane var JS'yi neden içine koyuyorsunuz HREF?
Ben Leggiero

Supuhstar, Gerçek kod dinamiktir, javascript ve harici olarak tanımlanan birkaç yüz öğe için bir <a> öğesi oluşturacaktır. Her öğe ya statik bir bağlantı adresi belirtir ve bu, oluşturulan <a> öğesinin normal "href davranışını" kullanması gereken yerdir. Veya öğe için bir javascript işlev çağrısı belirtilir, bu durumda <a> öğesinin davranışı öğenin bağlamına göre hesaplanır. Ve <a> oluşturucunun kodunda, her öğe için belirtilmiş olanı kopyalamak istedim, bunun bir bağlantı adresi mi yoksa bir javascript işlev çağrısı mı olduğunu test etmek yok.
Bo Johanson

Bunun sorumu nasıl yanıtladığını anlamıyorum. Birkaç yüz bağlantı istediğimi kim söyledi? Tüm bunların anlamını, hatta az önce söylediklerinin yarısını gerçekten anlamıyorum.
Ben Leggiero

1

Bu benim için çalıştı:

<a href="" onclick="return false;">Action</a>

1
Cevabınız için teşekkür ederiz ve Stack Exchange'e hoş geldiniz! Ne yazık ki, bu yeni bir bilgi eklemiyor gibi görünüyor, çünkü görünen o ki önceki cevaplar zaten bunu öneriyor. Kabul ediyorsanız, onlara olumlu oy vermek daha iyidir. Kabul etmiyorsanız, lütfen yanıtınızı düzenleyin, böylece yeni bilgileriniz gün ışığına çıksın!
Ben Leggiero

0

Benim durumumda, kullanıcı "a" öğesini tıkladığında bir koşulum vardı. Koşul şuydu:

Diğer bölümde ondan fazla öğe varsa, kullanıcı başka bir sayfaya yönlendirilmemelidir.

Diğer bölümde ondan az öğe varsa, kullanıcı başka bir sayfaya yönlendirilmelidir.

"A" elemanlarının işlevselliği diğer bileşene bağlıdır. Tıklama olayındaki kod şu şekildedir:

var elementsOtherSection = document.querySelectorAll("#vehicle-item").length;
if (elementsOtherSection> 10){
     return true;
}else{
     event.preventDefault();
     return false;
}

0

Aşağıdaki gibi kullanmayı javascript:void(0)deneyin-

<a href="javascript:void(0)" onclick="...">Text</a>


Katıldığınız için teşekkür ederiz. Bu, orijinal sorumda ortaya koyduğum senaryoya yardımcı olmuyor: "Tıklanırsa ve Javascript etkinleştirilirse, yalnızca yürütmesini ONCLICKve yok saymasını istiyorum HREF. Aynı şekilde, Javascript devre dışı veya desteklenmiyorsa, onu istiyorum HREFURL'yi takip etmek ve yok saymak ONCLICK. "
Ben Leggiero
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.