Làm cách nào để bật hoặc tắt neo bằng jQuery?


150

Làm cách nào để bật hoặc tắt neo bằng jQuery?


Cảm ơn tất cả câu trả lời của bạn, Tuy nhiên nó vẫn không hoạt động nên bạn có thể làm cho nó hoạt động với chức năng document
Yet

Nó có thể hữu ích nếu bạn đăng đoạn mã không hoạt động.
Hoan hô Im Giúp

Trên thực tế Mã hóa của tôi nằm trong Rails và mã hóa của tôi là <% = foo.add_associated_link ('Thêm email', @ project.email.build)%> khi tôi kết xuất nó vào trình duyệt tôi có thể thấy email nhưng tôi không thể tắt nó ngay cả tôi đã thử với mã hóa như e.preventDefault () nhưng không có kết quả
Senthil Kumar Bhaskaran

Câu trả lời:


194

Để ngăn chặn một neo theo sau chỉ định href, tôi sẽ đề nghị sử dụng 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();
    });
});

Xem:

http://docs.jquery.com/Events/jQuery.Event#event.preventDefault.28,29

Cũng xem câu hỏi trước đây trên SO:

jQuery vô hiệu hóa một liên kết


Tôi đã thử với những "attr" nó chỉ hoạt động trên phần tử biểu mẫu không phải trên thẻ Anchor.
Senthil Kumar Bhaskaran

1
@senthil - Ngăn chặn Lỗi được coi là cách 'phù hợp' để thực hiện việc này, hãy xem chỉnh sửa của tôi (liên kết đến Q + A khác)
karim79

Trên thực tế Mã hóa của tôi nằm trong Rails và mã hóa của tôi là <% = foo.add_associated_link ('Thêm email', @ project.email.build)%> khi tôi kết xuất nó vào trình duyệt tôi có thể thấy email nhưng tôi không thể tắt nó ngay cả tôi đã thử với mã hóa như e.preventDefault () nhưng không có kết quả
Senthil Kumar Bhaskaran

2
Làm thế nào để tôi đảo ngược $('a.something').on("click", function (e) { e.preventDefault(); });?
ア レ ッ

2
Không đồng ý, sử dụng CSS "con trỏ sự kiện: none;" thay vào đó, giống như trong các unswers khác.
vitrilo

116

Ứng dụng tôi hiện đang làm việc với phong cách CSS kết hợp với javascript.

a.disabled { color:gray; }

Sau đó, bất cứ khi nào tôi muốn vô hiệu hóa một liên kết, tôi gọi

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

Sau đó, trong trình xử lý nhấp chuột cho 'thelink', thẻ tôi luôn chạy kiểm tra điều đầu tiên

if ($('thelink').hasClass('disabled')) return;

6
Không phải dòng cuối cùng nói "trả về false;"?
Prestaul

1
Gọi tốt, Prestaul. Khi được liên kết với thẻ <a>, tôi đang sử dụng: <a href="whthing" onclick="returneacLink(this)"> .. sau đó: chức năng vô hiệu hóa (nút) {if (dojo.hasClass (nút, 'Bị vô hiệu hóa') return false; dojo.addClass (nút, 'bị vô hiệu hóa'); return true;} .. điều này cho phép liên kết được nhấp một lần và hành động (trả về true) và sau đó nó không cho phép hành động (trả về sai).
Neek

Lưu ý rằng trong trình xử lý, bạn có thể nên sử dụng $ (this) thay vì $ ("thelink") vì điều đó có thể thay đổi hoặc người dùng có thể dễ dàng sao chép / dán mã.
Alexis Wilke

2
Đề nghị bạn cũng thêm 'con trỏ: mặc định' vào kiểu bị tắt.
Stuart Hallows

40

Tôi tìm thấy một câu trả lời mà tôi thích hơn nhiều ở đây

Trông như thế này:

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

Việc kích hoạt sẽ liên quan đến việc thiết lập thuộc tính href

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

Điều này cung cấp cho bạn sự xuất hiện rằng phần tử neo trở thành văn bản bình thường và ngược lại.


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

}); 

12

Tôi nghĩ rằng một giải pháp tốt hơn là đặt thuộc tính dữ liệu bị vô hiệu hóa và neo kiểm tra cho nó khi nhấp. Bằng cách này, chúng ta có thể vô hiệu hóa tạm thời một neo cho đến khi ví dụ javascript kết thúc bằng lệnh gọi ajax hoặc một số tính toán. Nếu chúng tôi không vô hiệu hóa nó, thì chúng tôi có thể nhanh chóng nhấp vào nó một vài lần, điều này là không mong muốn ...

$('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;
});

Tôi đã tạo một ví dụ jsfiddle: http://jsfiddle.net/wgZ59/76/


11

Chọn câu trả lời là không tốt.

Sử dụng kiểu CSS sự kiện con trỏ . (Như Rashad Annara đề xuất)

Xem MDN https://developer.mozilla.org/en-US/docs/Web/CSS/pulum-events . Nó được hỗ trợ trong hầu hết các trình duyệt.

Việc thêm thuộc tính "bị vô hiệu hóa" đơn giản vào neo sẽ thực hiện công việc nếu bạn có quy tắc CSS toàn cầu như sau:

a[disabled], a[disabled]:hover {
   pointer-events: none;
   color: #e1e1e1;
}

Ngoài ra với các sự kiện con trỏ bạn sẽ không cần bao gồm trạng thái: hover vì đó là sự kiện con trỏ. Bạn chỉ cần bao gồm bộ chọn [bị tắt].
Larry Dukek

10

Hãy thử các dòng dưới đây

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

Coz, ngay cả khi bạn vô hiệu hóa <a>thẻ hrefsẽ hoạt động vì vậy bạn cũng phải loại bỏ href.

Khi bạn muốn bật, hãy thử các dòng dưới đây

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

1
Đây chính xác là những gì tôi cần khi sử dụng JQuery với ASP.net MVC ActionLink. Cảm ơn!
Eaglei22

8

Nó đơn giản như trả về false;

Ví dụ.

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

hoặc là

jQuery("#menu a").click(function(){
   return false;
})

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

Trong tập tin css

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

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

Nếu phương thức này được gọi, hành động mặc định của sự kiện sẽ không được kích hoạt.



4

Bạn không bao giờ thực sự xác định cách bạn muốn họ bị vô hiệu hóa, hoặc điều gì sẽ gây ra việc vô hiệu hóa.

Trước tiên, bạn muốn tìm ra cách đặt giá trị thành bị vô hiệu hóa, vì bạn sẽ sử dụng Hàm thuộc tính của JQuery và để chức năng đó xảy ra trong một sự kiện , như nhấp chuột hoặc tải tài liệu.


1

Đối với các tình huống bạn phải đặt nội dung văn bản hoặc html trong thẻ neo, nhưng bạn đơn giản không muốn thực hiện bất kỳ hành động nào khi nhấp vào phần tử đó (như khi bạn muốn liên kết paginator ở trạng thái bị vô hiệu hóa vì nó trang hiện tại), chỉ cần cắt ra href. ;)

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

Câu trả lời của @ michael-đồng cỏ đã cho tôi biết điều này, nhưng anh ấy vẫn đang giải quyết các tình huống mà bạn vẫn phải / đang làm việc với jQuery / JS. Trong trường hợp này, nếu bạn có quyền kiểm soát việc tự viết html, chỉ cần x-ing thẻ href là tất cả những gì bạn cần làm, vì vậy giải pháp là một HTML thuần túy!

Các giải pháp khác không có phần mềm xử lý jQuery giữ cho href yêu cầu bạn đặt # trong the href, nhưng điều đó khiến trang bị bật lên trên cùng và bạn chỉ muốn nó bị vô hiệu hóa cũ. Hoặc để trống, nhưng tùy thuộc vào trình duyệt, điều đó vẫn làm những thứ như nhảy lên trên cùng, và đó là HTML không hợp lệ theo các IDE. Nhưng rõ ràng một athẻ là HTML hoàn toàn hợp lệ mà không có HREF.

Cuối cùng, bạn có thể nói: Được rồi, tại sao không bỏ thẻ hoàn toàn hơn? Bởi vì thường thì bạn không thể, athẻ được sử dụng cho mục đích tạo kiểu trong khung CSS hoặc kiểm soát bạn đang sử dụng, như trình phân trang của Bootstrap:

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


1

Vì vậy, với sự kết hợp của các câu trả lời ở trên, tôi đã đưa ra điều này.

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

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

0

Nếu bạn không cần nó hoạt động như một thẻ neo thì tôi muốn thay thế nó hơn. Ví dụ: nếu thẻ neo của bạn giống như

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

sau đó sử dụng jquery bạn có thể làm điều này khi bạn cần hiển thị văn bản thay vì liên kết.

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

Vì vậy, theo cách này, chúng ta chỉ cần thay thế thẻ neo bằng thẻ div. Điều này dễ dàng hơn nhiều (chỉ 2 dòng) và cũng đúng về mặt ngữ nghĩa (vì hiện tại chúng tôi không cần liên kết nên không có liên kết)


0

Vô hiệu hóa hoặc kích hoạt bất kỳ yếu tố nào với thuộc tính bị vô hiệu hóa.

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

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

Tại sao câu trả lời này được bỏ phiếu? Nó trả lời câu hỏi "Làm thế nào để kích hoạt hoặc vô hiệu hóa một neo bằng jQuery?"
RitchieD

Tôi tin rằng đó là vì các liên kết vẫn được mở khi nhấp vào neo.
Zombaya
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.