2010-06-23 33 views
14

Sau khi tôi thêm một autocomplete đến một yếu tố như:Làm cách nào để xóa tự động hoàn tất sau khi được thêm vào phần tử?

commObj=$("#communityName").autocomplete("auto_commName_backend.php", 
       {'onItemSelect': handleItemSelect}, {'extraParams': 'ndo' + ndo}); 

Có cách nào tôi có thể vô hiệu hóa nó hoặc loại bỏ các autocomplete cho các phần tử tự động?

Tôi đang sử dụng plugin jquery tự động hoàn thành đã sửa đổi từ Dylan Verheul. http://www.pengoworks.com/workshop/jquery/autocomplete_docs.txt

Trả lời

40

Bạn có thể loại bỏ các hành vi autocomplete bằng cách sử dụng dòng mã sau đây:.

if (jQuery(control).data('autocomplete')) { 
    jQuery(control).autocomplete("destroy"); 
    jQuery(control).removeData('autocomplete'); 
} 
+0

Cảm ơn bạn rất nhiều! Đây là giải pháp tôi đã làm sau vài giờ. Nó hoạt động! –

+0

Tôi nghĩ rằng dòng về removeData là không cần thiết. Tôi đã thử nghiệm, và sau khi thực hiện $ (control) .autocomplete ('destroy') thì $ (control) .data ('autocomplete') trả về undefined – Fractalf

+0

Với phiên bản jQuery UI tôi đang sử dụng (1.11), .data() luôn trả về không xác định. Sẽ an toàn hơn nếu bỏ qua điều kiện và đặt thử/bắt xung quanh cuộc gọi để tự động hoàn thành ("hủy"). – cleong

0

Plugin đó tự kết nối với số <input> khá chặt chẽ. Nếu đó là trang của tôi, tôi nghĩ rằng tôi chỉ có hai thẻ với cùng một "tên", một với tự động hoàn thành và một thẻ không có. Khi tôi muốn chuyển đổi giữa chúng, tôi sẽ làm cho một bị vô hiệu hóa và ẩn, và cho phép/hiển thị khác. (chỉnh sửa oh và cũng đảm bảo giá trị của trường được sao chép qua lại khi họ chuyển đổi)

0

Nếu bạn thêm một lớp như "EnableAC" vào phần tử của mình, bạn có thể nhắm mục tiêu lớp đó để tự động hoàn thành. Khi bạn hoàn thành tự động hoàn thành và muốn vô hiệu hóa nó, bạn loại bỏ lớp đó.

Tại sao bạn muốn tắt tính năng này? Nó có thể gây nhầm lẫn cho người dùng của bạn nếu họ muốn thay đổi lựa chọn của họ và tính năng tự động hoàn tất không kích hoạt.

+1

Tôi không chắc chắn rằng nó sẽ hoạt động, như một khi các plugin được ràng buộc với '' có sẽ vẫn ở vị trí xử lý một số sự kiện. – Pointy

0

Tôi vừa xem qua tệp js cho plugin.

Có vẻ như một dòng javascript (số 21) trong thời gian khởi động của các plugin jquery.autocomplete.js rằng thiết lập đầu vào nguồn có nguồn gốc như:

input.autocompleter = me; 

Nếu không có thử nghiệm, có thể bạn có thể chỉ đơn giản là sau đó gọi những điều sau đây để xóa liên kết giữa plugin và đầu vào gốc?

$('#<your input id>').autocompleter = null; 
+0

Điều đó * có thể * hoạt động, nhưng tập lệnh cũng liên kết một loạt các trình xử lý sự kiện. – Pointy

+0

Vâng, như tôi đã nói, tôi đã không có nhiều cơ hội để nhìn vào nó như tôi đã vội vàng nhưng nó có thể là một điểm khởi đầu tốt cho P Coder để xem xét. Không có chức năng tiêu diệt nguyên bản nào trong tập lệnh plugin mà tôi có thể thấy. –

0

Tôi chỉ cố gắng $ ('#') autocomplete = null; và nó hoạt động. Tôi đã cho phép thay đổi tên của ruồi và kết quả sẽ không hiển thị, bây giờ nó có. Tên nguyên cũ sẽ hiển thị trước nay là cái mới không

8

Cách dễ nhất và an toàn nhất tôi thấy là:

$(control).autocomplete({source: []}); 

Ngoài ra, như đã đề cập trước đây cũng làm việc:

$(control).autocomplete("destroy"); 

Nếu bạn chắc chắn rằng điều khiển của bạn có bộ xử lý tự động hoàn tất.

+0

Tùy chọn đầu tiên ở đây hoàn hảo cho tôi. Tôi tự động tạo 'mã khuyến mại' và sau khi đã chọn, tôi muốn xóa khả năng chọn bất kỳ thứ gì khác trừ khi quảng cáo được thêm vào đã bị xóa, vì vậy: $ ('# tags_promo'). Autocomplete ('option', 'source ', []); thêm quảng cáo và $ ('# tags_promo'). autocomplete ('option', 'source', availablePromo); khi xóa. Cảm ơn một bó, tôi đã cố gắng làm đủ mọi thứ phức tạp hơn là thế này! – kyle

+0

Tùy chọn đầu tiên hoạt động một nét duyên dáng. –

+0

Chính xác những gì tôi cần –

0

Trong phiên bản mới nhất của giao diện người dùng jQuery (1.12), $(control).data('autocomplete') không trả lại đúng ngay cả khi dữ liệu tự động hoàn tất hiển thị.

Thay vào đó, kiểm tra sự hiện diện của lớp ui-autocomplete-input đã trả về true.

Sau đây là đủ, tôi tin.

if ($(control).hasClass('ui-autocomplete-input')) { 
    $(control).autocomplete("destroy"); 
} 
Các vấn đề liên quan