köprü tıklamasında javascript işlevini çağırın


Yanıtlar:


135

Yine de, typical href="#"veya href="javascript:void"veya yerine, bunun href="whatever"çok daha mantıklı olduğunu düşünüyorum:

var el = document.getElementById('foo');
el.onclick = showFoo;


function showFoo() {
  alert('I am foo!');
  return false;
}

<a href="no-javascript.html" title="Get some foo!" id="foo">Show me some foo</a>

Javascript başarısız olursa, bazı geri bildirimler vardır. Ayrıca, düzensiz davranış (olması durumunda sayfa atlama, olması durumunda href="#"aynı sayfayı ziyaret etme href="") ortadan kalkar.


13
+1 Bu, şu anda göze çarpmayan tek cevaptır. Yapabilseydim +100.
James

@Lewis, evet, ideal olarak <a> etiketleri saf js çağrıları için kullanılmazdı, ancak maalesef eski tarayıcılar: bağlantısız öğeler için fareyle üzerine gelmeyi desteklemiyordu. Bu nedenle, js olaylarını tetiklemek için bağlantılar sıklıkla kullanıldı.
Chris Van Opstal

@Chris - Ne demek istediğimi anladığından emin değilim Chris. <a href="#"> Hiçbir şey yapma </a> 'ı kullanmamanızı ve bunun yerine <a href="a/link/somwhere.html"> Bir şeyler yap </a>' ı ve ardından href'i geçersiz kılmak için aşamalı geliştirme. Bu en temiz çözümdür. Bağlantılar iyidir, ancak Javascript devre dışı bırakılırsa veya bir nedenle (IE6 uyarınca) bazı javascriptler işleyici oluşturulmadan ve atanmadan önce bozulursa BİR ŞEY yapmaları gerekir. Bu şekilde tüm kullanıcılarınız mutlu.
Lewis

2
Benim için çalışmıyor, sadece sayfa yüklemesinde onclick işlevini otomatik olarak çalıştırıyor. Bu aynı zamanda erişilebilirlik söz konusu olduğunda bir kabusa benziyor.
Shawn Solomon

4
Bu işe yaramıyor, sadece sizi href url'sine yönlendiriyor.
paddotk

59

Hepsinin en basit cevabı ...

<a href="javascript:alert('You clicked!')">My link</a>

Veya bir javascript işlevi çağırma sorusuna cevap vermek için:

<script type="text/javascript">
function myFunction(myMessage) {
    alert(myMessage);
}
</script>

<a href="javascript:myFunction('You clicked!')">My link</a>


2
StackOverflow 'Kod parçacığını çalıştır' içindeki bağlantı Firefox'ta çalışmıyor (uyarı oluşturulmadı), ancak bu tür bir bağlantıyı normal bir web sayfasına koyduğumda FF'de çalışıyor.
the_pwner224

Evet tuhaf, benim için çalışıyordu, şimdi değil. Diğerleri benzer sorunlar yaşıyordu ve Firefox'u tamamen yeniden yüklemek dışında kesin bir çözüm yok gibi görünüyor.
Jayden Lawson

26

Onclick parametresi ile ...

<a href='http://www.google.com' onclick='myJavaScriptFunction();'>mylink</a>

kafa karıştırıcı ifade. google.com'a mı gidiyor yoksa javascript işlevini mi arıyor? önceliği hangisi?
Nguai al

12

JQuery yanıtı. JavaScript, JQuery'yi geliştirmek için icat edildiğinden, size JQuery'de bunu yapan bir örnek veriyorum:

<div class="menu">
    <a href="http://example.org">Example</a>
    <a href="http://foobar.com">Foobar.com</a>
</div>

<script>
jQuery( 'div.menu a' )
    .click(function() {
        do_the_click( this.href );
        return false;
    });

// play the funky music white boy
function do_the_click( url )
{
    alert( url );
}
</script>

53
JQuery'yi geliştirmek için JavaScript icat edildi? Bu yeni bir tane!
palswim

35
Bu, Lego'nun Lego Batman'i inşa etmek için icat edildiğini okumak gibiydi.
Shawn Solomon

5
@ShawnSolomon Kabul ettiğimiz için mutluyum :)
elcuco

1
@elcuco, harika alay! + 'd :) Yaşasın JQuery
Zuul

6

Javascript köprüleri için href yerine onclick yöntemini kullanmayı tercih ediyorum. Ve hangi değere sahip olduğunuzu belirlemek için daima uyarıları kullanın.

<a href='#' onclick='jsFunction();alert('it works!');'>Link</a>

Ayrıca giriş etiketlerinde de kullanılabilir, örn.

<input type='button' value='Submit' onclick='jsFunction();alert('it works!');'>


3

İdeal olarak, bu bağlantıların her birinin 'işaretlemesinde' bir değişiklik yapmak istediğinizde, kodunuzun yeniden derlenmesi gerekeceğinden, kodunuzda bağlantı oluşturmaktan tamamen kaçınırım. Bunu yapmak zorunda kalırsanız, javascript 'çağrılarınızı' HTML'nize yerleştirmem, tamamen kötü bir uygulamadır, işaretlemeniz belgenizi tanımlamalıdır, ne yaptığını değil, javascript'inizin işi budur.

Her öğe (veya ortak işlevi varsa sınıf) için belirli bir kimliğinizin olduğu bir yaklaşım kullanın ve ardından olay işleyicilerini eklemek için Aşamalı Geliştirme'yi kullanın, örneğin:

[c# example only probably not the way you're writing out your js]
Response.Write("<a href=\"/link/for/javascriptDisabled/Browsers.aspx\" id=\"uxAncMyLink\">My Link</a>");

[Javascript]  
document.getElementById('uxAncMyLink').onclick = function(e){

// do some stuff here

    return false;
    }

Bu şekilde, kodunuz JS'nin devre dışı bırakıldığı kullanıcılar için kırılmaz ve açık bir endişeye yol açar.

Umarım işe yarar.


1
Neden#? Neden sadece değil <a href="https://stackoverflow.com/link/for/javascriptDisabled/Browsers.aspx" id="uxAncMyLink">My Link</a>?
Mahmoodvcs

2

Onclick olayını doğrudan ayarlamak yerine genellikle element.attachEvent (IE) veya element.addEventListener (diğer tarayıcılar) kullanılmasını öneririm, çünkü ikincisi o öğe için mevcut olay işleyicilerin yerini alacaktır.

attachEvent / addEventListening, birden çok olay işleyicisinin oluşturulmasına izin verir.


1

onclickHTML özelliğini kullanın .

onclickOlay işleyicisi hangi elemana kullanıcıların fare düğmesinden bir tıklama etkinliğini yakalayan onclicközellik uygulanır. Bu eylem genellikle JavaScript işlevi [...] gibi bir komut dosyası yöntemine çağrı ile sonuçlanır.


1

Sayfanın yüklenmesini beklemiyorsanız, öğeyi kimliğine göre seçemezsiniz. Bu çözüm, çalıştırılacak kodu alma konusunda sorun yaşayan herkes için çalışmalıdır.

<script type="text/javascript">
window.onload = function() {
    document.getElementById("delete").onclick = function() {myFunction()};

    function myFunction() {
        //your code goes here
        alert('Alert message here');
    }
};
</script>

<a href='#' id='delete'>Delete Document</a>
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.