附加后jQuery输入值未定义

时间:2009-10-13 11:13:09

标签: javascript jquery cakephp

任何可以帮助我的人都将非常感激。我好像陷入了困境。

我正在尝试将使用jquery.autocomplete插件从AJAX请求中检索到的响应数据分配给输入元素。我可以很好地获得响应数据,但是当我尝试将其插入'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 个答案:

答案 0 :(得分:2)

似乎您正在尝试提醒文本值而不是值本身。

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

也许可以改为:

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

答案 1 :(得分:2)

这似乎是一个范围问题。尝试围绕循环中i的值创建一个闭包:

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

可以找到更好的解释in this answer

  

你在这里遇到的问题是   变量项随每个循环而变化。   在某些情况下引用项目时   稍后,它持有的最后一个值是   用过的。你可以使用一种叫做a的技术   闭合(基本上是一个功能   返回一个函数)以快速范围   变量不同。