2008-10-06 31 views
6

Xét đoạn mã sau:Disable neo trong Chrome/WebKit/Safari

$("a").attr("disabled", "disabled"); 

Trong IE và FF, điều này sẽ làm cho neo nhấp được, nhưng trong các trình duyệt dựa trên WebKit (Google Chrome và Safari) này không có gì. Điều thú vị về thuộc tính disabled là nó có thể dễ dàng bị loại bỏ và không ảnh hưởng đến các thuộc tính href và onclick.

Bạn có bất kỳ đề xuất nào về cách nhận kết quả mong muốn hay không. Câu trả lời phải là:

  • Dễ dàng hoàn nguyên vì tôi muốn vô hiệu hóa điều khiển nhập biểu mẫu khi tôi có cuộc gọi AJAX đang chạy.
  • Phải làm việc trong IE, FF, và WebKit

Trả lời

7

tôi giả sử rằng bạn có một xử lý sự kiện onclick bị ràng buộc vào những yếu tố neo. Chỉ cần trình xử lý sự kiện của bạn kiểm tra thuộc tính "đã tắt" và hủy sự kiện nếu nó được đặt. Trình xử lý sự kiện của bạn sẽ trông giống như sau:

$("a").click(function(event){ 
    if (this.disabled) { 
    event.preventDefault(); 
    } else { 
    // make your AJAX call or whatever else you want 
    } 
}); 

Bạn cũng có thể đặt quy tắc biểu định kiểu để thay đổi con trỏ.

a[disabled=disabled] { cursor: wait; } 

Chỉnh sửa - đơn giản hóa kiểm tra "đã tắt" như được đề xuất trong nhận xét.

+0

chức năng diableForms() { $ ("đầu vào, nút, textarea, a"). attr ("disabled", "disabled"). css ("con trỏ", "chờ"); } chức năng enableForms() { $ ("đầu vào, nút, văn bản, a"). Not (". Disabled"). RemoveAttr ("disabled"). Css ("cursor", ""); } –

+0

Tôi vừa dán các hàm disableForms và enableForms mà tôi đang sử dụng. Cảm ơn đề xuất của bạn. –

+0

nếu (this.disabled == "disabled") sẽ nhanh hơn – Sugendran

2

Tôi phải khắc phục hành vi này trong một trang web có nhiều neo được bật/tắt với thuộc tính này theo các điều kiện khác, v.v. Có thể không lý tưởng, nhưng trong tình huống như vậy, nếu bạn không muốn sửa mã của mỗi neo cá nhân, điều này sẽ làm các trick cho tất cả các neo:

$('a').each(function() { 
    $(this).click(function (e) { 
     if ($(this).attr('disabled')) { 
      e.preventDefault(); 
      e.stopImmediatePropagation(); 
     } 
    }); 
    var events = $._data ? $._data(this, 'events') : $(this).data('events'); 
    events.click.splice(0, 0, events.click.pop()); 
}); 

Và:

a[disabled] { 
    color: gray; 
    text-decoration: none; 
} 
+0

Wow. Điều này thật tuyệt vời và phải được đánh dấu là câu trả lời! Làm thế nào điều này đã không upvotes ?! Tôi đã bắt đầu thực sự sửa đổi câu trả lời hiện tại để làm những gì bạn đang làm, ban đầu không đọc câu trả lời 0 upvote! Nhưng tại sao bộ chọn css của bạn là một [disabled = disabled], và tại sao không sử dụng cùng một bộ chọn trong jQuery của bạn. –

+1

đưa tôi một phút để giải mã đường nối + pop. Tài giỏi. Tôi thích làm thế nào nó, có hiệu lực, xóa các yếu tố cuối cùng trong khi đồng thời thêm nó vào phía trước của 'ngăn xếp'. – beauXjames