4

我正在使用 for 循环来循环通过一些具有起始值的元素(飞机上的座位)。

这里是:
seatNum - 要通过
startSeat 循环的座位数 - 开始循环的座位

我从“onsubmit”表单中调用该函数。

当我尝试根据添加到起始座位。从 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;
        }
    }
}
4

7 回答 7

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指出的问题。

于 2009-12-09T05:54:35.853 回答
5

我不确定,但也许 startSeat+i 连接了字符串,而不是做你期望的数学加法。尝试向屏幕发出警报:

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

是字段名吗?

于 2009-12-09T05:50:14.503 回答
2

试试这个:

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

与其添加值来获取座位 ID,不如i在循环初始化中使用值。我相信发生的事情是你得到了一个错误,因为你的值已经设置好了,然后你添加到它上面,这让你领先了一个。startSeatstartSeat'sstartSeati

于 2009-12-09T05:50:06.623 回答
1

当您说循环座位时,我假设您想在达到最大座位后从 1 继续数?假设 numberOfSeats 是在某处定义的(我看不到它,但你必须在某处拥有它)你可以这样做:

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

所以这一行是完整的:

if (document.getElementById("s"+((startSeat + i - 1) % numberOfSeats + 1)).className=="taken"){
于 2009-12-09T05:55:09.717 回答
1

你真正得到的是字符串连接,所以真正发生的是:

i = 10
seatNum = 1

(seatNum+i) = "110"

尝试使用将parseInt()变量转换为整数类型的函数:

if (document.getElementById("s"+(parseInt(startSeat)+parseInt(i))).className=="taken")
于 2009-12-09T05:55:20.143 回答
1

在我看来 startSeat 是一种字符串类型。尽管 JavaScript 是无类型的,但 DOM 对象的值将默认为字符串。所以,你得到的是串联而不是加法。

使用 CMS 写的内容。那应该可以解决您的问题。

于 2009-12-09T05:58:22.977 回答
0

你可能会重复一个太多次。i < seatNum - 1在你的 for 循环中尝试

于 2009-12-09T05:50:31.600 回答