jQuery变量声明它在定义时未定义

我正在尝试使用两个自动填充文本框,一个用于手机型号 – input1和一个用于固件 – input2在同一页面上。 当两个填充时我想要一个div用ID input1input2显示,但是当在input1中输入一个值时,它声称phone的变量是未定义的,当填写第二个时声明phoneid是未定义的。 这是HTML

iPhone 2G
iPhone 3G
iPhone 3GS
iPhone 4
iPhone 4S

jQuery的

 $("#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!"); var phone = li.selectPhone; var phoneid = phone.replace("iPhone ","iphone").toLowerCase(); }; function findFirmware(li) { if( li == null ) return alert("No match!"); var firmware = li.selectFirmware; $(".info").hide $(phoneid+firmware).show }; function selectPhone(li) { findPhone(li); } function selectFirmware(li) { findFirmware(li); } 

我正在使用它作为自动完成插件。 该页面可在此处查看。

谢谢。

EDIT1现在这是jQuery的样子,但它仍然会引发同样的错误。

  var phone; 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); } 

问题是div的ID属性和findFirmware()函数中的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有两个问题,如果算上缺少的括号和分号, $(phoneid+firmware).show好四个……

  1. 您尝试显示的div具有ID,您的选择器中没有#来按ID选择元素
  2. firmware包含带有句点的未解析字符串,因此当您的div ID为iphone2g12时, phoneid + firmware变为iphone2g1.2 ,因此您需要使用您解析它的firmwareid

小提琴演示: http : //jsfiddle.net/AaNWM/

这可能是一个范围问题。 尝试将此添加到脚本的顶部:

 var phone; var phoneid; 

随后省略var

 phone = li.selectPhone; 

它没有定义findFirmware()函数可以访问的任何地方 – 它被定义为findPhone()var ,因此是该函数的本地。

不确定像li.selectFirmware等的东西是什么意思,但那些也会破坏。

问题在于. id中的字符。

基本上,名称必须以下划线(_),短划线( – )或字母(a-z)开头,后跟任意数量的短划线,下划线,字母或数字。 有一个问题:如果第一个字符是破折号,则第二个字符必须是字母或下划线,并且名称必须至少为2个字符。

哪些字符在CSS类名/选择器中有效?