входное значение jQuery не определено после добавления - PullRequest
0 голосов
/ 13 октября 2009

Любой, кто может мне помочь, будет очень признателен. Кажется, я немного смутился.

Я пытаюсь назначить данные ответа - полученные из запроса AJAX с помощью плагина jquery.autocomplete - элементу ввода. Я могу получить данные ответа обратно нормально, но когда я пытаюсь вставить их в атрибут 'value', ничего не происходит!

$('#btnPopulate').click(function() {
if ($('#list_length').val() != '') {
    var length = $('#list_length').val();
    var row='';
    for (var i=0; i <= length; i++) {
        row="<tr><td>"+i+"</td><td><input name='data[CompanyRanking]["+i+
         "][company_id]' id='CompanyRanking"+i+
         "CompanyId' value='1'></td><input type='hidden' name='data[CompanyRanking]["+i+
         "][ranking]' id='CompanyRanking"+i+"Ranking' value='"+i+"'></tr>";
        $('#ranking_table').append(row);
        $("CompanyRanking"+i+"CompanyId").autocomplete({ 
            serviceUrl:'/backend/companies/search',
            minChars:2, 
            delimiter: null, // regex or character
            maxHeight:400,
            width:300,
            deferRequestBy: 50, //miliseconds
            // callback function:
            onSelect: function(value, data){ 
                alert('You selected: ' + value + ', ' + data); 
                                $('#CompanyRanking'+i+'CompanyId').val(data);
                alert('val: '+
                             $('#CompanyRanking'+i+
                             'CompanyId').val() + 'object?: '+
                             $('#CompanyRanking'+i+'CompanyId'));
               }
        });
            };
    //$('#btnPopulate').ac;
    } else {
    alert('You must first specify how many companies are in the list.');
};
    return false;
});

Ответы [ 2 ]

2 голосов
/ 13 октября 2009

Казалось бы, проблема масштаба. Попробуйте создать замыкание вокруг значения i внутри цикла:

onSelect: (function(i) {
    return function(value, data){ 
        $('#CompanyRanking'+i+'CompanyId').val(data);
    }
}(i))

Лучшее объяснение можно найти в этом ответе :

Проблема у вас здесь в том, что переменный элемент изменяется с каждым циклом. Когда вы ссылаетесь на элемент в некоторых более поздний пункт, последнее значение, которое он имел используемый. Вы можете использовать технику под названием закрытие (по сути, функция, которая возвращает функцию) для быстрого охвата переменная по-разному.

2 голосов
/ 13 октября 2009

Кажется, что вы пытаетесь предупредить текстовое значение, а не само значение.

alert('val: '+$('#CompanyRanking'+i+'CompanyId').text() + 'object?: '+$('#CompanyRanking'+i+'CompanyId'));

может быть изменено на:

alert('val: '+$('#CompanyRanking'+i+'CompanyId').val() + 'object?: '+$('#CompanyRanking'+i+'CompanyId'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...