Bagaimana cara mengaktifkan atau menonaktifkan jangkar menggunakan jQuery?

150

Bagaimana cara mengaktifkan atau menonaktifkan jangkar menggunakan jQuery?

Senthil Kumar Bhaskaran
sumber
Terima kasih atas semua jawaban Anda, Tetap saja tidak berfungsi, bisakah Anda membuatnya bekerja dengan document.ready berfungsi
Senthil Kumar Bhaskaran
Mungkin membantu jika Anda memposting potongan kode yang tidak berfungsi.
Hooray Im Helping
Sebenarnya coding saya ada di Rails dan coding saya adalah <% = foo.add_associated_link ('Tambah email', @ project.email.build)%> ketika saya render ke browser saya bisa melihat email tetapi saya tidak bisa menonaktifkannya bahkan saya mencoba dengan pengkodean seperti e.preventDefault () tetapi tidak ada hasil
Senthil Kumar Bhaskaran

Jawaban:

194

Agar jangkar tidak mengikuti yang ditentukan href, saya sarankan menggunakan preventDefault():

// jQuery 1.7+
$(function () {
    $('a.something').on("click", function (e) {
        e.preventDefault();
    });
});

// jQuery < 1.7
$(function () {
    $('a.something').click(function (e) {
        e.preventDefault();
    });

    // or 

    $('a.something').bind("click", function (e) {
        e.preventDefault();
    });
});

Lihat:

http://docs.jquery.com/Events/jQuery.Event#event.preventDefault.28.29

Lihat juga pertanyaan sebelumnya di SO:

jQuery menonaktifkan tautan

karim79
sumber
Saya mencoba dengan "attr" itu hanya berfungsi pada elemen form bukan pada Anchor tag.
Senthil Kumar Bhaskaran
1
@senthil - preventDefault dianggap sebagai cara 'tepat' untuk melakukan hal ini, melihat edit (link ke yang lain Q + A)
karim79
Sebenarnya coding saya ada di Rails dan coding saya adalah <% = foo.add_associated_link ('Tambah email', @ project.email.build)%> ketika saya render ke browser saya bisa melihat email tetapi saya tidak bisa menonaktifkannya bahkan saya mencoba dengan pengkodean seperti e.preventDefault () tetapi tidak ada hasil
Senthil Kumar Bhaskaran
2
bagaimana cara membalikkan $('a.something').on("click", function (e) { e.preventDefault(); });?
ア レ ッ ク ス
2
Tidak setuju, gunakan CSS "pointer-events: none;" sebaliknya, sama seperti di unswers lainnya.
vitrilo
116

Aplikasi yang sedang saya kerjakan melakukannya dengan gaya CSS dikombinasikan dengan javascript.

a.disabled { color:gray; }

Lalu setiap kali saya ingin menonaktifkan tautan, saya menelepon

$('thelink').addClass('disabled');

Kemudian, di handler klik untuk tag 'thelink' saya selalu menjalankan pemeriksaan hal pertama

if ($('thelink').hasClass('disabled')) return;
AgileJon
sumber
6
Bukankah seharusnya baris terakhir mengatakan "return false;"?
Prestaul
1
Panggilan bagus, Prestaul. Ketika dikaitkan dengan tag <a>, saya menggunakan: <a href="wh whatever" onclick="return disableLink(ini )"> .. lalu: fungsi disableLink (node) {if (dojo.hasClass (node, 'nonaktif') mengembalikan false; dojo.addClass (simpul, 'dinonaktifkan'); mengembalikan benar;} .. ini memungkinkan tautan untuk diklik sekali dan tindakan (kembali benar) dan setelah itu tidak memungkinkan tindakan (kembali false)
Neek
Perhatikan bahwa di handler Anda mungkin harus menggunakan $ (ini) daripada $ ("thelink") karena itu bisa berubah atau pengguna bisa dengan mudah menyalin / menempelkan kode.
Alexis Wilke
2
Sarankan Anda juga menambahkan 'kursor: default' ke gaya yang dinonaktifkan.
Stuart Hallows
40

Saya menemukan jawaban yang saya sukai jauh lebih baik di sini

Terlihat seperti ini:

$(document).ready(function(){
    $("a").click(function () { 
        $(this).fadeTo("fast", .5).removeAttr("href"); 
    });
});

Mengaktifkan akan melibatkan pengaturan atribut href

$(document).ready(function(){
    $("a").click(function () { 
        $(this).fadeIn("fast").attr("href", "http://whatever.com/wherever.html"); 
    });
});

Ini memberi Anda tampilan bahwa elemen jangkar menjadi teks normal, dan sebaliknya.

Michael Meadows
sumber
12
$("a").click(function(){
                alert('disabled');
                return false;

}); 
AlexC
sumber
12

Saya pikir solusi yang lebih baik adalah dengan mengatur atribut data yang dinonaktifkan pada dan jangkar cek untuk itu di klik. Dengan cara ini kita dapat menonaktifkan jangkar sementara hingga mis. Javascript selesai dengan panggilan ajax atau beberapa perhitungan. Jika kita tidak menonaktifkannya, maka kita dapat dengan cepat mengkliknya beberapa kali, yang tidak diinginkan ...

$('a').live('click', function () {
    var anchor = $(this);

    if (anchor.data("disabled")) {
        return false;
    }

    anchor.data("disabled", "disabled");

    $.ajax({
        url: url,
        data: data,
        cache: false,
        success: function (json) {
            // when it's done, we enable the anchor again
            anchor.removeData("disabled");
        },
        error: function () {
             // there was an error, enable the anchor
            anchor.removeData("disabled");
        }
    });

    return false;
});

Saya membuat contoh jsfiddle: http://jsfiddle.net/wgZ59/76/

Michal B.
sumber
11

Jawaban yang dipilih tidak baik.

Gunakan gaya CSS pointer-events . (Seperti yang disarankan Rashad Annara)

Lihat MDN https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events . Ini didukung di sebagian besar browser.

Menambahkan sederhana "dinonaktifkan" ke jangkar akan melakukan pekerjaan jika Anda memiliki aturan CSS global seperti berikut:

a[disabled], a[disabled]:hover {
   pointer-events: none;
   color: #e1e1e1;
}
vitrilo
sumber
Juga dengan pointer-events Anda tidak perlu menyertakan: hover state karena itu adalah pointer event. Anda hanya perlu menyertakan pemilih [yang dinonaktifkan].
Larry Dukek
10

Coba garis di bawah ini

$("#yourbuttonid").attr("disabled", "disabled");
$("#yourbuttonid").removeAttr("href");

Coz, Bahkan jika Anda menonaktifkan <a>tag hrefakan bekerja, Anda harus menghapus hrefjuga.

Bila Anda ingin mengaktifkan, coba di bawah garis

$("#yourbuttonid").removeAttr("disabled");
$("#yourbuttonid").attr("href", "#nav-panel");
Victor AJ
sumber
1
Inilah yang saya butuhkan saat menggunakan JQuery dengan ASP.net MVC ActionLink. Terima kasih!
eaglei22
8

Ini sesederhana return false;

ex.

jQuery("li a:eq(0)").click(function(){
   return false;
})

atau

jQuery("#menu a").click(function(){
   return false;
})
kim edgard
sumber
8
$('#divID').addClass('disabledAnchor');

Dalam file css

.disabledAnchor a{
       pointer-events: none !important;
       cursor: default;
       color:white;
}
Rashad Valliyengal
sumber
5
$("a").click(function(event) {
  event.preventDefault();
});

Jika metode ini dipanggil, tindakan default acara tidak akan dipicu.

Mohssen Beiranvand
sumber
4

Jika Anda mencoba untuk memblokir semua interaksi dengan halaman Anda mungkin ingin melihat Plugin jQuery BlockUI

Sam Hasler
sumber
4

Anda tidak pernah benar-benar menentukan bagaimana Anda ingin mereka dinonaktifkan, atau apa yang menyebabkan penonaktifan.

Pertama, Anda ingin mengetahui cara menetapkan nilai ke dinonaktifkan, untuk itu Anda akan menggunakan Fungsi Atribut JQuery , dan memiliki fungsi yang terjadi pada suatu peristiwa , seperti klik , atau pemuatan dokumen.

Sneakyness
sumber
1

Untuk situasi di mana Anda harus meletakkan konten teks atau html di dalam tag jangkar, tetapi Anda tidak ingin tindakan apa pun diambil ketika elemen itu diklik (seperti ketika Anda ingin tautan paginator berada dalam keadaan dinonaktifkan karena itu halaman saat ini), cukup href. ;)

<a>3 (current page, I'm totally disabled!)</a>

Jawaban oleh @ michael-meadows memberi saya tip untuk ini, tapi itu masih menangani skenario di mana Anda masih harus / bekerja dengan jQuery / JS. Dalam hal ini, jika Anda memiliki kendali atas penulisan html itu sendiri, cukup x-ing tag href yang perlu Anda lakukan, jadi solusinya adalah HTML murni!

Solusi lain tanpa jQuery finagling yang menjaga href mengharuskan Anda untuk meletakkan # di href, tetapi itu menyebabkan halaman memantul ke atas, dan Anda hanya ingin itu sudah lama dinonaktifkan. Atau membiarkannya kosong, tetapi tergantung pada peramban, itu masih melakukan hal-hal seperti melompat ke atas, dan, itu adalah HTML yang tidak valid menurut IDE. Namun ternyata sebuah atag adalah HTML yang benar-benar valid tanpa HREF.

Terakhir, Anda mungkin berkata: Oke, mengapa tidak membuang a tag sama sekali? Karena sering kali Anda tidak dapat melakukannya, atag digunakan untuk keperluan penataan dalam kerangka CSS atau kontrol yang Anda gunakan, seperti paginator Bootstrap:

http://twitter.github.io/bootstrap/components.html#pagination

Nicholas Petersen
sumber
1

Jadi dengan kombinasi tanggapan di atas, saya datang dengan ini.

a.disabled { color: #555555; cursor: default; text-decoration: none; }

$(".yourClass").addClass("disabled").click(function(e){ e.preventDefault(); 
Lawman
sumber
0

Jika Anda tidak perlu berperilaku sebagai tag jangkar maka saya lebih suka untuk menggantinya sama sekali. Misalnya jika tag anchor Anda seperti

<a class="MyLink" href="http://www.google.com"><span>My</span> <strong>Link</strong></a>

kemudian menggunakan jquery Anda dapat melakukan ini ketika Anda perlu menampilkan teks, bukan tautan.

var content = $(".MyLink").text(); // or .html()
$(".MyLink").replaceWith("<div>" + content + "</div>")

Jadi dengan cara ini, kita cukup mengganti tag jangkar dengan tag div. Ini jauh lebih mudah (hanya 2 baris) dan semantik benar juga (karena kita tidak memerlukan tautan sekarang karena itu seharusnya tidak memiliki tautan)

adeel41
sumber
0

Nonaktifkan atau Aktifkan elemen apa pun dengan properti yang dinonaktifkan.

// Disable 
$("#myAnchor").prop( "disabled", true );

// Enable
$( "#myAnchor" ).prop( "disabled", false );
RitchieD
sumber
Mengapa jawaban ini tidak dipilih? Ini menjawab pertanyaan "Bagaimana cara mengaktifkan atau menonaktifkan jangkar menggunakan jQuery?"
RitchieD
Saya percaya itu karena tautan masih bisa dibuka ketika mengklik jangkar.
Zombaya