Bagaimana cara mengaktifkan atau menonaktifkan jangkar menggunakan jQuery?


150

Bagaimana cara mengaktifkan atau menonaktifkan jangkar menggunakan jQuery?


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


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;

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.


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

}); 

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/


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

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");

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

8
$('#divID').addClass('disabledAnchor');

Dalam file css

.disabledAnchor a{
       pointer-events: none !important;
       cursor: default;
       color:white;
}

5
$("a").click(function(event) {
  event.preventDefault();
});

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



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.


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


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(); 

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)


0

Nonaktifkan atau Aktifkan elemen apa pun dengan properti yang dinonaktifkan.

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

// Enable
$( "#myAnchor" ).prop( "disabled", false );

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