Bagaimana cara menonaktifkan HREF jika onclick dijalankan?

98

Saya memiliki jangkar dengan set atribut dan keduanya . Jika diklik dan aktifkan Javascript, saya ingin hanya mengeksekusi dan mengabaikan . Demikian juga, jika Javascript dinonaktifkan atau tidak didukung, saya ingin mengikuti URL dan mengabaikannya . Di bawah ini adalah contoh dari apa yang saya lakukan, yang akan mengeksekusi JS dan mengikuti tautan secara bersamaan (biasanya JS dijalankan dan kemudian halaman berubah):HREFONCLICKONCLICKHREFHREFONCLICK

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

apa cara terbaik untuk melakukan ini?

Saya mengharapkan jawaban Javascript, tetapi saya akan menerima metode apa pun selama itu berfungsi, terutama jika ini dapat dilakukan dengan PHP. Saya telah membaca " a href link mengeksekusi dan mengalihkan halaman sebelum fungsi onclick javascript dapat selesai ", tetapi hanya menunda HREF, tetapi tidak sepenuhnya menonaktifkannya. Saya juga mencari sesuatu yang lebih sederhana.

Supuhstar
sumber
4
Saya akan menggunakan untuk jangkar satu dengan href dan satu tanpa. Pada pemuatan halaman, periksa apakah javascript diaktifkan, jika ditampilkan jangkar yang benar, tunjukkan yang lain.
ewein
1
@ewein Mengapa? Kedengarannya seperti banyak markup untuk fitur sederhana.
Supuhstar

Jawaban:

61

Anda dapat menggunakan solusi pertama yang belum diedit, jika Anda menempatkan pengembalian terlebih dahulu di onclickatribut:

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

Contoh: https://jsfiddle.net/FXkgV/289/

elproduc3r
sumber
1
Saya suka betapa bersihnya ini! Namun, solusi yang diterima memberi saya lebih banyak kendali, apakah HREF diabaikan
Supuhstar
Selama beberapa tahun terakhir saya berubah pikiran; ini adalah solusi yang lebih baik
Supuhstar
Betapa sehatnya!
DrunkDevKek
Tapi ini tidak bekerja dengan BEJ bereaksi. Akankah ini berhasil?
Coder
1
ini menghemat banyak waktu.
Mark Lozano
61
    yes_js_login = function() {
         // Your code here
         return false;
    }

Jika Anda mengembalikan false, tindakan default akan mencegah (membuka href).

Edit: Maaf, sepertinya tidak berhasil, Anda dapat melakukan hal berikut:

<a href="http://example.com/no-js-login" onclick="yes_js_login(); return false;">Link</a>
Chris Bier
sumber
1
Jawaban yang diedit tidak menjawab pertanyaan tersebut, karena menghapus tautan sebenarnya.
Itai Bar-Haim
12
alternatif digunakan onclick="return yes_js_login();"dengan yes_js_loginkembalifalse
Uwe Kleine-König
1
@cgogolin lihat jawaban saya.
Gabe Rogan
bagi siapa saja yang masih terjebak, dapat menambahkan baris inievent.stopImmediatePropagation()
didxga
35

Cukup nonaktifkan perilaku browser default menggunakan preventDefaultdan teruskan eventdalam HTML Anda.

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

yes_js_login = function(e) {
  e.preventDefault();
}
Buksy
sumber
1
return false tidak berfungsi di polimer ... solusi di atas berhasil ... Terima kasih
Paras Sachapara
16
<a href="http://www.google.com" class="ignore-click">Test</a>

dengan jQuery:

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

dengan JavaScript

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

Anda menetapkan kelas .ignore-clickke sebanyak mungkin elemen yang Anda suka dan klik pada elemen tersebut akan diabaikan

Andrew
sumber
Ini adalah solusi yang bagus! Saya menggunakannya untuk tombol yang saya miliki yang ketika diklik kelas semu .btn-loadingditambahkan ke tautan yang diklik, kemudian jika berhasil tanda centang (pada kesalahan X) menggantikan animasi pemuatan. Saya tidak ingin tombol tersebut dapat diklik lagi dalam beberapa kasus (untuk keberhasilan dan kesalahan), dengan menggunakan ini saya dapat dengan $(elemnent).addClass('disabled')mudah dan mudah mencapai fungsionalitas yang saya cari dengan cara yang elegan!
Matthew Mathies
14

Anda dapat menggunakan kode sederhana ini:

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

Lebih mudah jika Anda meneruskan parameter peristiwa seperti ini:

<a href="#" onclick="yes_js_login(event);">link</a>
function yes_js_login(e) {
    e.stopImmediatePropagation();
}
Trigon219
sumber
1
Itu tidak berhasil untuk saya. Saya harus menggunakan e.preventDefault ()
Milan Simek
2

Ini mungkin bisa membantu. Tidak perlu JQuery

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

Kode ini berfungsi sebagai berikut: Teruskan tautan relatif ke Penampil Dokumen Google

  1. Dapatkan versi tautan lengkap dari jangkar pada this.href
  2. buka tautan jendela baru.

Jadi dalam kasus Anda ini mungkin berhasil:

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

Saya memecahkan situasi di mana saya membutuhkan template untuk elemen yang akan menangani sebagai alternatif URL biasa atau panggilan javascript, di mana fungsi js membutuhkan referensi ke elemen pemanggil. Dalam javascript, "ini" berfungsi sebagai referensi mandiri hanya dalam konteks elemen bentuk, misalnya, tombol. Saya tidak menginginkan tombol, hanya tampilan tautan biasa.

Contoh:

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

Atribut href dan onClick memiliki nilai yang sama, kecuali saya menambahkan "return false" pada onClick jika itu adalah panggilan javascript. Memiliki "return false" dalam fungsi yang dipanggil tidak berfungsi.

Bo Johanson
sumber
kenapa ada dua? Mengapa Anda menempatkan JS di HREF?
Supuhstar
Supuhstar, Kode sebenarnya adalah dinamis, javascript, dan akan menghasilkan elemen <a> untuk beberapa ratus item yang ditentukan secara eksternal. Setiap item akan menentukan alamat tautan statis, dan di sanalah elemen <a> yang dihasilkan harus menggunakan "perilaku href" biasa. Atau, panggilan fungsi javascript ditentukan untuk item tersebut, dalam hal ini perilaku elemen <a> dihitung, berdasarkan konteks elemen. Dan dalam kode untuk generator <a>, saya hanya ingin menyalin apa pun yang ditentukan untuk setiap elemen, tidak ada pengujian apakah itu alamat tautan atau panggilan funtion javascript.
Bo Johanson
Saya tidak mengerti bagaimana ini menjawab pertanyaan saya. Siapa bilang saya ingin beberapa ratus tautan? Saya benar-benar tidak mengerti maksud semua ini, atau bahkan setengah dari apa yang baru saja Anda katakan.
Supuhstar
1

Ini berhasil untuk saya:

<a href="" onclick="return false;">Action</a>
Nol
sumber
1
Terima kasih atas jawaban Anda dan selamat datang di Stack Exchange! Sayangnya, ini sepertinya tidak menambah pengetahuan baru, karena sepertinya jawaban sebelumnya sudah menyarankan hal ini. Jika Anda setuju, maka lebih baik untuk memberi suara positif. Jika Anda tidak setuju, harap edit jawaban Anda agar pengetahuan baru Anda terungkap!
Supuhstar
0

Dalam kasus saya, saya memiliki kondisi ketika pengguna mengklik elemen "a". Syaratnya adalah:

Jika bagian lain memiliki lebih dari sepuluh item, maka pengguna tidak boleh diarahkan ke halaman lain.

Jika bagian lain memiliki kurang dari sepuluh item, maka pengguna harus diarahkan ke halaman lain.

Fungsionalitas elemen "a" bergantung pada komponen lainnya. Kode dalam peristiwa klik adalah sebagai berikut:

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