Tôi đang sử dụng jQuery UI AutoComplete control (chỉ cần cập nhật lên jQuery UI 1.8.1). Bất cứ khi nào người dùng rời khỏi hộp văn bản, tôi muốn đặt nội dung của hộp văn bản thành giá trị đã biết và đặt trường ID ẩn cho giá trị được chọn. Ngoài ra, tôi muốn trang đăng lại khi nội dung của hộp văn bản được thay đổi.jQuery AutoComplete chọn kích hoạt sau khi thay đổi?
Hiện tại, tôi đang thực hiện điều này bằng cách chọn sự kiện tự động hoàn tất đặt id ẩn và sau đó là sự kiện thay đổi trên hộp văn bản đặt giá trị hộp văn bản và nếu cần thiết sẽ khiến bài đăng trở lại.
Nếu người dùng chỉ sử dụng bàn phím, tính năng này hoạt động hoàn hảo. Bạn có thể nhập, sử dụng mũi tên lên và xuống để chọn giá trị và sau đó nhấn tab để thoát. Sự kiện được chọn kích hoạt, id được đặt và sau đó sự kiện thay đổi sẽ kích hoạt và trang đăng lại.
Nếu người dùng bắt đầu nhập và sau đó sử dụng chuột để chọn từ tùy chọn tự động hoàn tất, sự kiện thay đổi sẽ kích hoạt (khi tiêu điểm chuyển sang menu tự động hoàn thành?) Và trang đăng lại trước khi sự kiện được chọn có cơ hội được đặt ID.
Có cách nào để sự kiện thay đổi không kích hoạt cho đến sau sự kiện được chọn, ngay cả khi sử dụng chuột?
$(function() {
var txtAutoComp_cache = {};
var txtAutoComp_current = { label: $('#txtAutoComp').val(), id: $('#hiddenAutoComp_ID').val() };
$('#txtAutoComp').change(function() {
if (this.value == '') { txtAutoComp_current = null; }
if (txtAutoComp_current) {
this.value = txtAutoComp_current.label ? txtAutoComp_current.label : txtAutoComp_current;
$('#hiddenAutoComp_ID').val(txtAutoComp_current.id ? txtAutoComp_current.id : txtAutoComp_current);
} else {
this.value = '';
$('#hiddenAutoComp_ID').val('');
}
// Postback goes here
});
$('#txtAutoComp').autocomplete({
source: function(request, response) {
var jsonReq = '{ "prefixText": "' + request.term.replace('\\', '\\\\').replace('"', '\\"') + '", "count": 0 }';
if (txtAutoComp_cache.req == jsonReq && txtAutoComp_cache.content) {
response(txtAutoComp_cache.content);
return;
}
$.ajax({
url: 'ajaxLookup.asmx/CatLookup',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: jsonReq,
type: 'POST',
success: function(data) {
txtAutoComp_cache.req = jsonReq;
txtAutoComp_cache.content = data.d;
response(data.d);
if (data.d && data.d[0]) { txtAutoComp_current = data.d[0]; }
}
});
},
select: function(event, ui) {
if (ui.item) { txtAutoComp_current = ui.item; }
$('#hiddenAutoComp_ID').val(ui.item ? ui.item.id : '');
}
});
});
Giá trị ID hộp văn bản và ID ẩn được duy trì từ bài đăng trước, vì vậy tôi không thể thấy một cách dễ dàng để xác định rằng tôi đã bắt được thay đổi hiện tại thay vì một số thay đổi trước đây đã được xử lý. Tôi đoán vấn đề là thoát khỏi hộp văn bản mà không chọn mục là hợp lệ và cần được xử lý riêng biệt khỏi thoát khỏi hộp văn bản trong khi chọn một mục và tôi không thể tìm ra cách xác định điều gì đang xảy ra nếu chọn kích hoạt sau khi thay đổi. – Zarigani