2012-11-07 42 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)的末尾。只要不要忘记一次创建小部件。 –

相关问题