2011-11-20 37 views
0

我想要在同一頁上有兩個自動填充文本框,一個用於手機型號 - input1,另一個用於固件 - input2。當兩個填充我想要一個div與ID input1input2顯示,但在input1中輸入一個值時,它聲稱手機的變量是未定義的,填充第二個時聲明phoneid是未定義的。 這裏的HTMLjQuery變量聲稱它是undefined時已經定義

<div id="formcontainer"> 
<input id="input1"/> 
<input id="input2"/> 
</div> 
<div id="iphone2g1.1" class="info" style="display:none">iPhone 2G</div> 
<div id="iphone2g1.2" class="info" style="display:none">iPhone 3G</div> 
<div id="iphone2g1.3" class="info" style="display:none">iPhone 3GS</div> 
<div id="iphone2g1.4" class="info" style="display:none">iPhone 4</div> 
<div id="iphone2g1.5" class="info" style="display:none">iPhone 4S</div> 

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

我使用this的自動完成插件。 該頁面可以被查看here

謝謝。

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); 
} 
+0

的問題是在'在ID .'字符。 http://stackoverflow.com/questions/448981/what-c​​haracters-are-valid-in-css-class-names –

+0

@WojciechBednarski我沒有意識到這一點,謝謝! – Supertod

回答

0

的問題是在你的div的ID屬性,並在你的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,以及4如果算上缺少括號和分號但是...

  1. 該div你試圖s如何有一個ID,您不必#在您選擇通過ID選擇元素
  2. firmware包含未解析字符串以期使phoneid + firmware成爲iphone2g1.2當你的DIV ID是iphone2g12所以你需要使用其中firmwareid你解析出來。

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

0

這可能是一個範圍界定問題。嘗試添加給你的腳本的頂部:

var phone; 
var phoneid; 

隨後省略var

phone = li.selectPhone; 
+0

我已經添加了你說的一開始,並且還添加了firmwareid = phone.replace(「。」,「」);並從ID刪除點,但它仍然聲稱它的未定義。 – Supertod

0

不會在任何位置定義是對findFirmware()功能來訪問 - 它定義爲findPhone()一個var,因此本地功能。

不知道像li.selectFirmware等東西打算什麼,但那些也將打破。

+0

我該如何讓它不在本地? – Supertod

+0

@Supertod您可以像Alex建議的那樣使其成爲全局的,或者使用其中一種JavaScript模塊模式將其隔離到命名空間中。 –

0

問題出在id中的.字符。

Basically1,名稱必須以下劃線(_),破折號( - )開頭,或 字母(A-Z),其次是任意數量的破折號,下劃線,字母, 或數字。有一個問題:如果第一個字符是破折號,則第二個字符必須是字母或下劃線,並且名稱必須至少爲2個字符,長度爲 。

Which characters are valid in CSS class names/selectors?