jQuery AutoComplete select-Brand nach ändern?
Ich bin mit dem jQuery-UI-AutoComplete-Steuerelement (aktualisiert um jQuery-UI-1.8.1). Wann verlässt der Benutzer den text box, die ich einstellen will, den Inhalt der text-box auf einen bekannten guten Wert und die Einrichtung einer versteckten ID-Feld für den Wert, der ausgewählt wurde. Darüber hinaus möchte ich die Seite zu posten zurück, wenn der Inhalt des Textfeldes geändert werden.
Derzeit bin ich der Umsetzung dieser durch die AutoVervollständigen-wählen Sie Ereignis festlegen, das versteckte id und dann ein change-Ereignis für das Textfeld bestimmt die textbox-Wert und, wenn notwendig, die Ursachen einer post zurück.
Wenn der Benutzer benutzt die Tastatur, das funktioniert perfekt. Sie können Art, verwenden Sie die aufwärts-und abwärts-Pfeile, um einen Wert auszuwählen und dann tab zu beenden. Das select-Ereignis ausgelöst wird, wird die id gesetzt ist und dann das change-Ereignis ausgelöst, und die Seite Beiträge zurück.
Wenn der Benutzer mit der Eingabe beginnt, und verwendet dann die Maus, um wählen Sie aus der AutoVervollständigen-Optionen, wenn das change-Ereignis feuert (als Fokus auf die AutoVervollständigen-Menü?) und die Seite Beiträge zurück, bevor das select-Ereignis hat eine chance, um die ID einzustellen.
Gibt es einen Weg, um das change-Ereignis erst ausgelöst, nachdem die select-Ereignis, auch wenn eine Maus verwendet wird?
$(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 : '');
}
});
});
InformationsquelleAutor Zarigani | 2010-05-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie dies lösen, indem Sie die Umsetzung Ihrer change-Ereignis als eine AutoVervollständigen-option, wie auch wählen, anstatt mit jQuery-change () - Funktion.
Sehen Sie die Liste der events in die AutoVervollständigen-demo & Dokumentation Seite. Es besagt, dass das change-Ereignis wird immer ausgelöst, nachdem das Ereignis schließen, was ich vermute, ausgelöst wird, nachdem das select-Ereignis. Haben Sie einen Blick auf die Quelle für 'combobox', um zu sehen, ein Beispiel change-Ereignis-hook.
InformationsquelleAutor ndbroadbent
Klappte es bei mir auf der Maus auswählen, wenn ich dies getan habe:
Dies bewirkt, dass die TextBox den text zu ändern auf die Maus konzentrieren sich die Ereignisse, nur die Art, wie es geschieht, auf Tastatur-Ereignisse. Und wenn wir wählen Sie ein Element, Sie löst eine Auswahl geändert.
InformationsquelleAutor Poornima
Weiß ich nicht verhindern das change-Ereignis aus Feuer, aber Sie konnte sich leicht werfen einige Bedingungen in Ihrem change-Ereignis, das macht Sie sicher, dass die hidden-Feld festgelegt wurde, und dass die TextBox hat derzeit eine Wert.
InformationsquelleAutor Nathan Taylor