2009-12-09 81 views
4

我正在使用for循環來循環通過一些具有起始值的元素(坐在飛機上)。Javascript getElementById代理奇怪

這就是:
seatNum - 通過
startSeat被循環的座位數 - 的座位,開始騎自行車

我打電話從表單功能「的onsubmit」。

問題出現在for循環中,當我嘗試去獲取具有「s1」「s2」「s3」等id ...「s45」「s46」等id命名約定的元素時...基於循環計數器添加到起始位置。從0(起始位置)到seatNum(多少個位置)計數。

任何想法爲什麼通過ID不能正確解析?除了for循環內的最後一個外,其他所有的工作都很好。

是的,我是新手編程,所以我可能沒有最佳實踐,請在風格上寬容。

function check() { 
    var startSeat; 
    var fName = document.getElementById('fName').value 
    var lName = document.getElementById('lName').value 
    var address = document.getElementById('address').value 
    var city = document.getElementById('city').value 
    var state = document.getElementById('state').value 
    var zip = document.getElementById('zip').value 
    var phone = document.getElementById('phone').value 
    var seatNum = document.getElementById('seatNumber').value 
    var y=document.getElementById('seatList1').value; 
    var z=document.getElementById('seatList2').value; 

    if (z >= y) { 
     startSeat = y; 
    } 
    else { 
     startSeat = z; 
    } 

    if ((fName == "") || (lName == "") || (address == "") || (phone == "") || (zip == "") || (state == "") || (city == "")) { 
     alert("You must fully complete the form"); 
     return false; 
    } 

    for (var i = 0; i < seatNum; i++) { 
     if (document.getElementById("s"+(startSeat+i)).className=="taken"){ 
      alert("Selected seat(s) already booked."); 
      return false; 
     } 
    else { 
      continue; 
     } 
    } 
} 
+0

你如何設置s-like ID?他們是否帶有頁面標記,或者在頁面加載後用JavaScript創建它們?標記中的 – yoda 2009-12-09 05:49:33

+0

。它實際上是一個表格 - > http://www.pixology.net/planesite/ – user48202 2009-12-09 05:53:44

回答

7

將您yz變量數:

var y = +document.getElementById('seatList1').value; 
var z = +document.getElementById('seatList2').value; 

var startSeat = (z >= y) ? y : z; // or simply startSeat = Math.min(z,y); 

這將解決這個問題@Faruz指出了這個問題。

+0

謝謝。我可以告訴這個網站對我來說會是一個問題。 :) – user48202 2009-12-09 06:06:59

2

試試這個:

for (var i = startSeat; i < seatNum; i++) { 
    if (document.getElementById("s"+i).className == "taken") { 
     alert("Selected seat(s) already booked."); 
     return false; 
    } 
} 

而不是增加istartSeat值來獲得席位ID,就在環路初始化使用startSeat's值。我相信發生了什麼事情是因爲您的startSeat值已經設置,然後您將i添加到了它,因爲它使您前進一個。

+0

問題是,startSeat可能是1-104的數字,seatNum將總是一個數字,較小的數字。所以上面的條件(我 user48202 2009-12-09 05:52:47

5

我不確定,但也許startSeat +我連接字符串,而不是做數學增加你的期望。 嘗試通過以下屏幕:

alert(document.getElementById("s"+(startSeat+i))); 

它是字段名稱嗎?

0

你可能會迭代太多次。嘗試在i < seatNum - 1 for循環

1

當您說通過座位循環時,我假設您想在達到最大座位後繼續從1開始計數?假設numberOfSeats某處定義(我看不到它,但你必須有地方的話),你可以這樣做:

"s"+((startSeat + i - 1) % numberOfSeats + 1) 

所以在全行:

if (document.getElementById("s"+((startSeat + i - 1) % numberOfSeats + 1)).className=="taken"){ 
1

你是什麼真是越來越是字符串連接,所以究竟發生什麼事是這樣的:

i = 10 
seatNum = 1 

(seatNum+i) = "110" 

試試這個使用parseInt()功能鑄造變量爲整數類型:

if (document.getElementById("s"+(parseInt(startSeat)+parseInt(i))).className=="taken") 
1

在我看來像startSeat是一個字符串類型。儘管JavaScript是無類型的,但DOM對象的值將默認爲一個字符串。所以,你得到了一個連接而不是加法。

使用CMS寫的內容。這應該能解決你的問題。