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

Schreibe einen Kommentar