panggil fungsi javascript pada klik hyperlink


Jawaban:


133

Lebih rapi lagi, daripada typical href="#"atau href="javascript:void"atau href="whatever", menurut saya ini lebih masuk akal:

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>

Jika Javascript gagal, ada beberapa umpan balik. Selanjutnya, perilaku tidak menentu (lompatan halaman dalam kasus href="#", mengunjungi halaman yang sama dalam kasus href="") dieliminasi.


13
+1 Saat ini satu-satunya jawaban yang tidak mengganggu. +100 jika saya bisa.
Yakobus

@Lewis, ya, idealnya tag <a> tidak akan digunakan untuk panggilan js murni, tetapi sayangnya browser lama tidak mendukung: arahkan kursor untuk elemen non-tautan. Jadi tautan sering digunakan untuk memicu kejadian js.
Chris Van Opstal

@ Chris - Saya tidak yakin Anda mengerti maksud saya Chris. Saya menyarankan agar Anda tidak menggunakan <a href="#"> Tidak melakukan apa-apa </a> melainkan menggunakan <a href="a/link/somwhere.html"> Lakukan sesuatu </a> dan kemudian gunakan peningkatan progresif untuk menimpa href. Ini adalah solusi terbersih. Jangkar baik-baik saja, tetapi mereka harus melakukan SESUATU jika javascript dinonaktifkan - atau karena alasan tertentu (sesuai IE6) beberapa javascript rusak sebelum penangan dibuat dan ditetapkan. Dengan cara ini semua pengguna Anda senang.
Lewis

2
Tidak berfungsi untuk saya, hanya secara otomatis menjalankan fungsi onclick pada pemuatan halaman. Ini juga tampak seperti mimpi buruk terkait aksesibilitas.
Shawn Solomon

4
Ini tidak berhasil, ini hanya mengarahkan Anda ke url href.
paddotk

59

Jawaban paling sederhana dari semuanya adalah ...

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

Atau untuk menjawab pertanyaan tentang memanggil fungsi javascript:

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

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


2
Tautan di 'Jalankan cuplikan kode' StackOverflow tidak berfungsi di Firefox (tidak ada peringatan yang dibuat), tetapi berfungsi di FF ketika saya meletakkan jenis tautan ini di laman web biasa.
the_pwner224

Ya itu aneh, itu berhasil untuk saya, sekarang tidak. Yang lain mengalami masalah serupa dan sepertinya tidak ada solusi pasti, selain dari menginstal ulang Firefox sepenuhnya.
Jayden Lawson

26

Dengan parameter onclick ...

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

pernyataan yang membingungkan. apakah menuju ke google.com atau memanggil fungsi javascript? mana yang memiliki prioritas?
Nguai al

12

Jawaban JQuery. Sejak JavaScript diciptakan untuk mengembangkan JQuery, saya memberi Anda contoh dalam JQuery melakukan ini:

<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
JavaScript diciptakan untuk mengembangkan jQuery? Itu yang baru!
palswim

35
Ini seperti membaca bahwa Lego diciptakan untuk membangun Lego Batman.
Shawn Solomon

5
@ShawnSolomon Saya senang bahwa kami setuju :)
elcuco

1
@elcuco, sarkasme yang bagus! + 'd :) Long Live JQuery
Zuul

6

Saya lebih suka menggunakan metode onclick daripada href untuk hyperlink javascript. Dan selalu gunakan peringatan untuk menentukan nilai apa yang Anda miliki.

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

Ini juga bisa digunakan pada tag masukan misalnya.

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


3

Idealnya saya akan menghindari membuat tautan dalam kode Anda di belakang sama sekali karena kode Anda perlu dikompilasi ulang setiap kali Anda ingin membuat perubahan pada 'markup' dari masing-masing tautan tersebut. Jika Anda harus melakukannya, saya tidak akan menyematkan 'panggilan' javascript Anda di dalam HTML Anda, ini adalah praktik yang buruk sama sekali, markup Anda harus mendeskripsikan dokumen Anda bukan apa fungsinya, itulah tugas javascript Anda.

Gunakan pendekatan di mana Anda memiliki id khusus untuk setiap elemen (atau kelas jika memiliki fungsi umum) dan kemudian gunakan Peningkatan Progresif untuk menambahkan pengendali kejadian, seperti:

[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;
    }

Dengan cara itu kode Anda tidak akan rusak untuk pengguna dengan JS dinonaktifkan dan itu akan memiliki pemisahan kepentingan yang jelas.

Harapan itu berguna.


1
Mengapa C #? Kenapa tidak <a href="https://stackoverflow.com/link/for/javascriptDisabled/Browsers.aspx" id="uxAncMyLink">My Link</a>?
Mahmoodvcs

2

Saya biasanya akan merekomendasikan menggunakan element.attachEvent (IE) atau element.addEventListener (browser lain) daripada menyetel acara onclick secara langsung karena yang terakhir akan menggantikan penangan acara yang ada untuk elemen itu.

attachEvent / addEventListening memungkinkan beberapa event handler dibuat.


1

Gunakan onclickatribut HTML .

The onclickevent handler menangkap acara klik dari tombol mouse pengguna pada elemen mana onclickatribut diterapkan. Tindakan ini biasanya menghasilkan panggilan ke metode skrip seperti fungsi JavaScript [...]


1

Jika Anda tidak menunggu halaman dimuat, Anda tidak akan dapat memilih elemen dengan id. Solusi ini akan berfungsi untuk siapa saja yang mengalami masalah dalam mendapatkan kode untuk dieksekusi

<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>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.