मैं jQuery UI AutoComplete control का उपयोग कर रहा हूं (बस jQuery UI 1.8.1 में अपडेट किया गया है)। जब भी उपयोगकर्ता टेक्स्ट बॉक्स छोड़ देता है, तो मैं टेक्स्ट बॉक्स की सामग्री को ज्ञात-अच्छे मान पर सेट करना चाहता हूं और चयनित मूल्य के लिए एक छुपा आईडी फ़ील्ड सेट करना चाहता हूं। इसके अतिरिक्त, मैं पृष्ठ को वापस पोस्ट करना चाहता हूं जब टेक्स्ट बॉक्स की सामग्री बदली जाती है।jQuery स्वत: पूर्ण परिवर्तन के बाद फायरिंग का चयन करें?
वर्तमान में, मैं स्वत: पूर्ण चयन ईवेंट को छुपा आईडी सेट करके और फिर टेक्स्ट बॉक्स पर एक परिवर्तन ईवेंट करके इसे कार्यान्वित कर रहा हूं जो टेक्स्टबॉक्स मान सेट करता है और यदि आवश्यक हो, तो एक पोस्ट बैक का कारण बनता है।
यदि उपयोगकर्ता कीबोर्ड का उपयोग करता है, तो यह पूरी तरह से काम करता है। आप टाइप कर सकते हैं, एक मान का चयन करने के लिए ऊपर और नीचे तीरों का उपयोग करें और फिर बाहर निकलने के लिए टैब का उपयोग करें। चुनिंदा घटना आग लगती है, आईडी सेट की जाती है और फिर परिवर्तन घटना आग लगती है और पृष्ठ पोस्ट वापस आ जाता है।
यदि उपयोगकर्ता टाइपिंग शुरू करता है और फिर स्वत: पूर्ण विकल्पों में से चुनने के लिए माउस का उपयोग करता है, तो परिवर्तन घटना आग लगती है (जैसे फोकस स्वत: पूर्ण मेनू में बदल जाता है?) और चयन ईवेंट को सेट करने का मौका मिलने से पहले पृष्ठ पोस्ट आईडी।
क्या घटना का चयन होने तक भी ईवेंट को आग लगने का कोई तरीका नहीं है, यहां तक कि जब माउस का उपयोग किया जाता है?
$(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 : '');
}
});
});
टेक्स्टबॉक्स और छुपा आईडी मान पिछले पोस्ट बैक से बने रहे हैं, इसलिए मुझे यह निर्धारित करने का एक आसान तरीका नहीं दिख रहा है कि मैंने पहले से ही कुछ बदलावों के बजाय वर्तमान परिवर्तन को पकड़ा है। मुझे लगता है कि समस्या यह है कि किसी आइटम को चुने बिना टेक्स्ट बॉक्स से बाहर निकलना वैध है और किसी आइटम को चुनते समय टेक्स्ट बॉक्स से बाहर निकलने से अलग से संभाला जाना चाहिए और मैं यह निर्धारित नहीं कर सकता कि यह बदलने के लिए कि क्या हो रहा है, अगर परिवर्तन के बाद आग का चयन करें। – Zarigani