自动完成jQuery插件无法正常工作,声明变量未定义

时间:2011-11-22 19:50:54

标签: javascript jquery forms jquery-plugins autocomplete

  

可能重复:
  jQuery variable claiming it's undefined when it has been defined

问题是当在firefox中打开它并为输入1键入值并选择它时,firebug说可变电话没有定义。我尝试在开始时定义变量,但它仍然停止工作。

这是jQuery:

$(document).ready(function() {

var phone;  //fix scoping
var phoneid;
var firmware;
var firmwareid;

$("#input1").autocompleteArray(["iPhone 2G","iPhone 3G","iPhone 3GS","iPhone 4","iPhone 4s"],
{   minChars:1,
    matchSubset:1,
    onItemSelect:selectPhone,
    onFindValue:findPhone,
    autoFill:true,
    maxItemsToShow:10,
    selectFirst:true,
});

$("#input2").autocompleteArray(["1.1","1.2","1.3","1.4","1.5"],
{   minChars:1,
    matchSubset:1,
    onItemSelect:selectFirmware,
    onFindValue:findFirmware,
    autoFill:true,
    maxItemsToShow:10,
    selectFirst:true,
    });



function findPhone(li) {
    if( li == null ) return alert("No match!");
    phone = li.selectPhone;
    phoneid = phone.replace("iPhone ","iphone").toLowerCase();
};

function findFirmware(li) {
    if( li == null ) return alert("No match!");
    firmware = li.selectFirmware;
    firmwareid = phone.replace(".","");
    $(".info").hide
    $(phoneid+firmware).show
};

function selectPhone(li) {
    findPhone(li);
}

function selectFirmware(li) {
    findFirmware(li);
}
    });

这是HTML:

<div id="formcontainer">
        <input id="input1"/>
        <input id="input2"/>
</div>
<div id="iphone2g11" class="info" style="display:none">iPhone 2G</div>
<div id="iphone2g12" class="info" style="display:none">iPhone 3G</div>
<div id="iphone2g13" class="info" style="display:none">iPhone 3GS</div>
<div id="iphone2g14" class="info" style="display:none">iPhone 4</div>
<div id="iphone2g15" class="info" style="display:none">iPhone 4S</div>

我正在使用此插件进行自动填充http://www.pengoworks.com/workshop/jquery/autocomplete.htm

3 个答案:

答案 0 :(得分:2)

它未定义,因为你这样做:

li.selectPhone;

传入的.selectPhone元素中不存在li。因此,一旦您更换字符串,就会出错。

假设我可能会认为我可能知道您要做什么,我将li.selectPhoneli.selectFirmware更改为li.innerHTML并且它工作正常。 jsFiddle

编辑:您还在固件功能中使用了phone.replace,所以我也改变了这一点。

答案 1 :(得分:2)

问题在于您的findFirmware()功能,请将其更改为

function findFirmware(li) {
    if( li == null ) return alert("No match!");
    firmware = li.selectFirmware;
    firmwareid = phone.replace(".","");
    $(".info").hide();
    $('#' + phoneid + firmwareid).show(); // This line was messed up
};

此行$(phoneid+firmware).show存在两个问题,如果计算缺少的括号和分号,则有四个问题,但是......

  1. 您尝试展示的div有ID,您的选择器中没有#来按ID选择元素
  2. firmware包含带有句点的未解析字符串,因此当您的div ID为phoneid + firmware时,iphone2g1.2变为iphone2g12,因此您需要使用firmwareid解析了它。
  3. 小提琴演示:http://jsfiddle.net/AaNWM/

答案 2 :(得分:1)

phone未定义,因为li.selectPhone未定义。

很难猜到为什么会在没有看到autoCompleteArray()的情况下丢失,乍一看它似乎不是jQuery自动完成插件的一部分?