2009-10-13 31 views
0

任何能夠幫助我的人都將非常感激。我似乎讓自己陷入了混亂之中。追加後未定義的jQuery輸入值

我試圖分配響應數據 - 到輸入元素 - 從使用jquery.autocomplete插件AJAX請求檢索。我可以將響應數據恢復正常,但是當我嘗試將其插入「值」屬性時,沒有任何反應!

$('#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; 
}); 
+0

我已經縮小這種錯誤多一點的來源。看起來循環變量'i'在'onSelect'函數中沒有被正確使用。當用戶在輸入字段中輸入一些數據時,這個函數被調用,所以'i'被設置爲最大循環次數,而不是我想要選擇的特定元素。 – gomezuk 2009-10-13 11:37:13

回答

2

這似乎是範圍問題。嘗試圍繞i循環內的價值創造一個封閉:

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

一個更好的解釋可以發現in this answer

你有這裏的問題是, 可變項的變化,每個循環。 當您在某個 稍後的點處引用項目時,它保存的最後一個值爲 。您可以使用一種技術叫做 封閉(基本上是一個函數, 返回功能)迅速範圍 變量不同。

+0

謝謝!你爲我節省了很多挫折。 – gomezuk 2009-10-13 12:11:19

2

看起來好像您試圖提醒文本值而不是值本身。

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

或許可以改爲:

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

感謝您的回覆。我也試過了。 .val()仍然返回'undefined'。我已更新原始帖子,以便更有意義。 – gomezuk 2009-10-13 11:31:17