Значение применяется вместо метки для текстового поля - PullRequest
0 голосов
/ 05 марта 2012

@ charlietfl Мне очень жаль, я возвращаю коллекцию json SelectListItem из представления Asp.Mvc. предыдущий образец данных был результатом операции карты, ajax возвращает:

[  
Object { Selected=false, Text="Guarujá", Value="9182"},  
Object { Selected=false, Text="Jaboticabal", Value="9265"},  
Object { Selected=false, Text="Jacareí", Value="9267"},  
Object { Selected=false, Text="Jandira", Value="9277"},  
Object { Selected=false, Text="Jaú", Value="9285"},  
Object { Selected=false, Text="Jundiaí", Value="9295"}  
]  

Я думаю, автозаполнение получит массив из: {label: "textToShow", value: "valueToBeKey"}
«Объект» в каждой строке моего возврата к исходному событию нарушает его?
Я так сплю, но всякая помощь приветствуется. Большое спасибо

@ charlietfl Образец данных, возвращаемый исходному событию после операции карты:

[  
Object { label="Guarujá", value="9182"},  
Object { label="Jaboticabal", value="9265"},  
Object { label="Jacareí", value="9267"},  
Object { label="Jandira", value="9277"},  
Object { label="Jaú", value="9285"},  
Object { label="Jundiaí", value="9295"},  
Object { label="São João da Boa Vista", value="9647"},  
Object { label="São José do Rio Preto", value="9659"},  
Object { label="São José dos Campos", value="9660"}  
]

Имея ту же проблему, что и , этот вопрос, но решение не работает для меня.
Кто-нибудь может мне помочь?
В моем сценарии ключ / значение после выбора элемента jquery установите текстовое поле со значением, а не с меткой.
Я нашел точку, где jquery установил мое текстовое поле со значением:

.menu({
 focus: function( event, ui ) {
    var item = ui.item.data( "item.autocomplete" );
    if ( false !== self._trigger( "focus", event, { item: item } ) ) {
        // use value to match what will end up in the input, if it was a key event
        if ( /^key/.test(event.originalEvent.type) ) {
            self.element.val( item.value );   <<<======  SETTING HERE
        }
    }
 },

Вот мой код:

//-------------------------------------------------
function resetElmntKey(elm) {
    var nmItK = $(elm).attr('data-fielditemid');
    var sltK = $("input[name='" + nmItK + "'][type='hidden']");
    $(sltK).val(0);
}
//-------------------------------------------------
function setupSelection(elm, selIt) {
    if (selIt != undefined) {
        var nmItK = $(elm).attr('data-fielditemid');
        var sltK = $("input[name='" + nmItK + "'][type='hidden']");
        var id = $(elm).attr('id');
        var sltV = "#" + id;
        $(sltK).val(selIt.value);
        $(sltV).val(selIt.label);
    }
}
//-------------------------------------------------
var context = new Array();
function setupView() {
    var elm = $("div[class='editor-field'] :text");
    $.each(elm, function () {
        //-------
        elemento = $(this);
        //-------
        /*
        elemento.keypress(function (event) {
            if (event.keyCode == 13) {
                event.preventDefault();
            }
        });
        */
        //-------            
        elemento.autocomplete({
            source: function (request, response) {
                var elId = $(this.element).attr('id');
                context[elId] = new Array();
                context[elId].elUr = this.element.attr('data-urlactionfind');
                context[elId].elFt = this.element.attr('data-fieldfilterid');
                context[elId].vlFt = $("#" + context[elId].elFt).val();
                context[elId].elVl = this.element.val();
                context[elId].result = null;
                $.ajax
                (
                    {
                        url: context[elId].elUr,
                        dataType: "json",
                        data: { filtro: context[elId].vlFt, fragmento: context[elId].elVl },
                        success: function (data) {
                            context[elId].result = $.map(data, function (item) {
                                return { label: item.Text, value: item.Value }
                            });
                            response(context[elId].result);
                        }
                    }
               )
            },
                select: function (event, ui) {
                resetElmntKey(this);
                var elId = $(this).attr('id');
                setupSelection(this, ui.item);
            },
            focus: function (event, ui) {
                event.preventDefault(); 
                resetElmntKey(this);
                var elId = $(this).attr('id');
                setupSelection(this, ui.item);                    
            }
        }).blur(function (event) {
            event.preventDefault(); 
            resetElmntKey(this);
            var elId = $(this).attr('id');
            if (context[elId].result != undefined) {
                var usrVal = this.value;
                var res = $.grep(context[elId].result, function (selIt, idx) {
                    return $.trim(selIt.label) == $.trim(usrVal);
                });
                if (res != undefined) {
                    setupSelection(this, res[0]);
                }
            }
        });
        //-------
    });
    /*
    elm.keyup(function () {
    var url_busca = $(this).attr('data-urlactionfind');

    alert('[id:' + $(this).attr('id') + ']' +
    '[val:' + $(this).val() + ']' +
    '[urlact:' + $(this).attr('data-urlactionfind') + ']' +
    '[fldFlt:' + $(this).attr('data-fieldfilterid') + ']');
    });
    */
}
function onloadpartial() {
    setupView();
}
//-------------------------------------------------

Ответы [ 2 ]

2 голосов
/ 12 марта 2012

Все, что вам нужно, это поставить «вернуть ложь»;в конце событий "select" и "focus".
У вас возникнут проблемы с настройкой идентификатора, когда пользователь вводит все элементы вместо одного.
Много раз, когда пользователь вводит все элементы, кроме select, в настройке связанныхЭлемент id не будет выполнен.

0 голосов
/ 06 марта 2012

Похоже, у вас есть несоответствие имени / значений в вашем $.map в успехе AJAX у вас есть это:

 return { label: item.Text, value: item.Value }`

Но у данных нет ключа Text, это должно быть Label.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...