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
好四个……
- 您尝试显示的div具有ID,您的选择器中没有
#
来按ID选择元素 -
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类名/选择器中有效?