Jquery AutoComplete: как получить идентификатор выбранных элементов?

У меня есть поле автозаполнения, которое отлично работает и извлекает данные из базы данных. Когда пользователь выбирает результат из ответа, я хочу сохранить идентификатор выбранного элемента в скрытом поле.

Вот код, который я использую для автозаполнения

 $jQNetbmis("input#txt_client_name").autocomplete("autosuggest_clientmaster.php", {
        width: 160,
        mustMatch: true,
        selectFirst:false,
        formatResult: function(row) {
            var resStr = row.toString();
            temp = resStr.substring(0,resStr.indexOf("+"));
            return temp;
        },
        formatItem: function(row, i, max) {
            var resStr = row.toString();
            var temp = resStr.substring(0,resStr.indexOf("+"));
            return temp;
        }
     }); 

Ниже приведен ответ, который я получаю, я нажимаю n

name 1+50
Name 2+85
Name 3+86
Name 4+98
Name 5 +103

Если пользователь выбирает имя 1, я хочу сохранить 50 в скрытом поле.

Я использую автозаполнение - плагин jQuery 1.0.2

Кришник


person Nick    schedule 15.12.2010    source источник
comment
Я не понимаю, что касается следующего ответа, который я получаю, я нажимаю n Можете ли вы быть более ясным или предоставить дополнительную информацию? Если вы знаете, что хотите поместить в скрытое поле, то почему не можете? $('input#hidden-field').attr('value', yourNumberHere);   -  person matthewpavkov    schedule 15.12.2010
comment
@matthewpavkov Это ответ сервера, который я получаю, когда нажимаю букву «n» на клавиатуре. Он извлекает имена, начинающиеся с n вместе с их идентификаторами. Сервер отправляет ответ в следующей форме «Заголовок + идентификатор». formatItem удалит часть +id из результата и отобразит только заголовок. Поэтому, если пользователь выбирает имя 2, я хочу получить идентификатор 85 и сохранить его в скрытом поле, чтобы использовать его позже. Извините, что ввел вас в заблуждение.....   -  person Nick    schedule 15.12.2010


Ответы (3)


Для этого можно использовать обработчик result. Пример того, как вы можете это сделать:

$('input#txt_client_name').result(function(event, data){
    $('input#hidden_field').val(data.substring(data.indexOf('+') + 1));
});

Обработчик запускается каждый раз, когда пользователь выбирает элемент. Кроме того, вы можете использовать автозаполнение пользовательского интерфейса jQuery вместо этого плагина, который устарел в пользу этого.

person Yi Jiang    schedule 15.12.2010
comment
Спасибо, И Цзян. Мне пришлось использовать data[0] вместо data.indexOf. И сделал несколько изменений. - person Nick; 15.12.2010


Я действительно не знаю, какое автозаполнение вы используете, но проблема, похоже, не в нем.

Просто объедините идентификатор с существующим значением скрытого поля:

$jQNetbmis("input#txt_client_name").autocomplete("autosuggest_clientmaster.php", {
    width: 160,
    mustMatch: true,
    selectFirst:false,
    formatResult: function(row) {
        var resStr = row.toString();
        //temp = resStr.substring(0,resStr.indexOf("+"));
        var temp = resStr.split('+');
        $('input#hidden_field').val($('input#hidden_field').val()+'+'+temp[1]);
        return temp[0];
    },
    formatItem: function(row, i, max) {
        var resStr = row.toString();
        var temp = resStr.substring(0,resStr.indexOf("+"));
        return temp;
    }
 }); 
person Mathias E.    schedule 15.12.2010
comment
formatResult,formatItem оба будут вызываться для каждого элемента в результирующем наборе. Так что каждый раз я буду получать только последние значения id - person Nick; 15.12.2010