Tôi đang gặp nhiều rắc rối khi tiện ích tự động hoàn thành của jQuery hoạt động cho tôi. Tôi đang sử dụng một danh sách các cặp khóa/giá trị từ một máy chủ.Tự động hoàn thành giao diện người dùng jQuery với tìm kiếm văn bản/id hỗn hợp
Tôi có các yêu cầu sau:
Nếu người dùng chọn giá trị từ tiện ích, tôi muốn chuyển ID đến máy chủ.
Nếu người dùng không chọn giá trị và nhập văn bản thô hoặc sửa đổi giá trị đã được chọn, tôi muốn xóa trường ID và chỉ gửi văn bản thô tới máy chủ.
Giả sử rằng someAjaxFunction
trả về một mảng các đối tượng mà tiện ích tự động hoàn thành mong đợi: {label:label, value:key}
.
Ban đầu tôi đặt autocomplete phụ tùng lên như vậy:
$(input).autocomplete({
source: sourceFunction,
minLength: 1
});
Thay đổi lựa chọn thậm chí bởi lơ lửng trên một trong những mặt hàng thay đổi văn bản trong hộp văn bản tham chiếu bởi $ (đầu vào) để chìa khóa cơ bản, thay vì nhãn. Điều này là không mong muốn từ quan điểm tương tác của người dùng - thực sự, lý do tại sao tôi điều tra điều này là bởi vì người dùng trang web tôi đang xây dựng luôn bị bối rối bởi văn bản họ nhập dường như biến thành số ngẫu nhiên!
Tôi đã thêm một lĩnh vực ẩn dưới hộp văn bản và thực hiện các lựa chọn() và tập trung() sự kiện để cloak ID như vậy:
$(input).autocomplete({
source: sourceFunction,
minLength: 1
focus: function(event, ui) {
$(idField).val(ui.item.value);
$(this).val(ui.item.label);
return false;
},
select: function(event, ui) {
$(idField).val(ui.item.value);
$(this).val(ui.item.label);
return false;
},
minLength: 1
});
này hoạt động tốt khi người dùng gắn bó với các tập lệnh được cung cấp bởi menu thả xuống tự động hoàn tất. ID được che giấu và được gửi chính xác đến máy chủ. Thật không may, nếu người dùng muốn nhập một số văn bản dạng tự do vào hộp và tìm kiếm dựa trên giá trị đó, trường ID không được đặt lại và ID đã chọn trước đó được gửi đến máy chủ. Điều này cũng khá khó hiểu.
Tài liệu Tự động điền giao diện người dùng jQuery liệt kê sự kiện change
và nêu rõ thuộc tính item
của đối số ui
sẽ được đặt thành mục đã chọn. Tôi figured tôi có thể thiết lập lại trường id ẩn trên một phím bấm và tái cư ID nếu autocomplete được thay đổi. Thật không may, ngoài sự kiện nhấn phím chụp toàn bộ các lần nhấn phím mà không cần đặt lại ID, câu lệnh return false
trong sự kiện select
ở trên cần thiết để quản lý văn bản trong hộp văn bản ngăn sự kiện change
không có .item được chỉ định đúng.
Vì vậy, bây giờ tôi đang mắc kẹt - Tôi không thực sự biết những gì khác tôi có thể thử để làm cho các chức năng hỗ trợ widget mà nó có vẻ như nó nên hỗ trợ theo mặc định. Hoặc là quá trình này là phức tạp hơn nó phải là, hoặc tôi đang thiếu một cái gì đó thực sự rõ ràng. Tôi đã chọn qua tất cả các sự kiện có sẵn và tất cả các ví dụ và đưa ra tay trống. Trong thực tế, ngay cả ví dụ "Dữ liệu tùy chỉnh và hiển thị" trên trang giao diện người dùng jQuery cũng gặp vấn đề này.
Tôi có thể thêm một số hacks ở phía máy chủ để trang trải cho điều này, nhưng tôi thực sự muốn có thể làm điều này ở cấp độ khách hàng.
Tôi cũng muốn gắn vào tiện ích tự động hoàn thành giao diện người dùng jQuery hơn là chuyển sang tiện ích con khác.
Xin lỗi, tôi có thể làm rõ điều gì đó không? Ít nhất một trong các vấn đề của bạn là bạn muốn hộp ID được điền * hoặc * ID được liên kết nếu người dùng nhập giá trị có ID tương ứng hoặc bất kỳ điều gì người dùng nhập nếu không có giá trị tương ứng - đúng/sai? – Stephen
Không, tôi chỉ muốn trường ID ẩn bị trống nếu văn bản trong hộp văn bản được đặt thành một thứ không tương ứng với lựa chọn do tự động điền cung cấp. – Shabbyrobe