自动填写表单上其他字段的值

时间:2012-11-07 21:09:12

标签: jquery-autocomplete jquery-ui-autocomplete

我想将表单上其他输入字段的值传递给具有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 });
  });

如果我手动设置fieldnames数组(即fieldnames = [“aaa”,“abc”];)自动完成工作但由于某种原因无法将其他字段的值传递给数组。

2 个答案:

答案 0 :(得分: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 });
        });
});

答案 1 :(得分: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 });
  }