2012-11-07 68 views
0

我想將表單上其他輸入字段的值傳遞給具有jQuery自動完成功能的輸入。我嘗試了幾種方法,但都沒有工作。這裏是一個什麼我迄今爲止的例子:來自表單上其他字段的自動完成值

HTML:

<input type="text" class="fieldname"/> 
<input type="text" class="fieldname"/> 
<input type="text" class="fieldname"/> 
<input type="text" class="fieldname"/> 
<input type="text" class="autofieldnames"/> 
<input type="text" class="autofieldnames"/> 

的jquery:

$(".fieldname").each(function() { 
    $(this).blur(function() { 
    var fieldnames = $(".fieldname").map(function(){ return this.value; }).get(); 
    }); 
$(".autofieldnames").each(function() { 
    $(this).autocomplete({ source: fieldnames }); 
    }); 

如果我手動設置字段名陣列(即,字段名= [ 「AAA」,「 abc「];)自動完成工作,但由於某種原因無法將其他字段的值傳遞給數組。

回答

0

它解決。僅供參考,這是我想出的:

html: 
<input type="text" class="fieldname"/> 
<input type="text" class="fieldname"/> 
<input type="text" class="fieldname"/> 
<input type="text" class="fieldname"/> 
<input type="text" onfocus="getfieldnames"/> 
<input type="text" onfocus="getfieldnames"/> 

jquery: 
function getfieldnames(obj) { 
    var fieldnames = $(".fieldname").map(function(){ return this.value; }).get(); 
    $(obj).autocomplete({ source: fieldnames }); 
    } 
0

當您使用var關鍵字來聲明一個變量時,它將成爲一個局部變量。這意味着fieldnames只對定義它的函數可見 - 而不是試圖讀取它的函數,因此刪除var關鍵字。

但是,由於fieldnames是一個非常通用的名稱,因此您不應該將其作爲全局變量(您應該儘量避免使用非泛型名稱來製作全局變量,但對於通用名稱變量更加危險)。因此,您應該將其聲明爲局部變量 - 但是在需要它的函數中可見的範圍內。

事情是這樣的:

$(function(){ 
     var fieldnames; 
     $(".fieldname").each(function() { 
       $(this).blur(function() { 
         fieldnames = $(".fieldname").map(function(){ return this.value; }).get(); 
       }); 
     }); 
     $(".autofieldnames").each(function() { 
       $(this).autocomplete({ source: fieldnames }); 
     }); 
}); 
+0

我按照你的建議,但自動完成仍然不顯示。我想知道是不是因爲'autofieldnames'在定義之前會將'fieldnames'變量繪製成字段。基本上,我需要'autofieldnames'上的焦點代碼來抓取當時的'fieldnames'變量。不知道如何做到這一點。 – tri

+0

是的,這可能是問題所在。您可以在創建自動填充小部件後設置自動填充的「源代碼」:查看[本文檔部分](http://api.jqueryui.com/autocomplete/#option-source)的末尾。只要不要忘記一次創建小部件。 –

相關問題