我正在使用for循环来循环一些具有起始值的元素(在平面上的座位)。
这是:
seatNum - 要通过循环的座位数
startSeat - 开始骑自行车的座位
我正在从“onsubmit”形式调用该函数。
问题出现在for循环中,当我尝试获取具有id命名约定“s1”“s2”“s3”等的元素时...“s45”“s46”等...基于循环柜台加入了起始座位。计数从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 :(得分:7)
将您的y
和z
变量转换为数字:
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指出的问题。
答案 1 :(得分:5)
我不确定,但也许startSeat + i会对字符串进行汇总,而不是按照您的预期进行数学加法。 尝试提醒屏幕:
alert(document.getElementById("s"+(startSeat+i)));
是字段名吗?
答案 2 :(得分:2)
试试这个:
for (var i = startSeat; i < seatNum; i++) {
if (document.getElementById("s"+i).className == "taken") {
alert("Selected seat(s) already booked.");
return false;
}
}
不是将i
添加到startSeat
值以获取座位ID,而是在循环初始化中使用startSeat's
值。我相信发生的事情是你获得off-by-one error,因为你的startSeat
值已经设置,然后你向它添加了i
,这让你前进了一个。
答案 3 :(得分:1)
当你说通过座位循环时,我假设你想要在达到最大座位后继续计数?假设numberOfSeats是在某个地方定义的(我看不到它,但你必须在某个地方找到它),你可以这样做:
"s"+((startSeat + i - 1) % numberOfSeats + 1)
所以完整的一行:
if (document.getElementById("s"+((startSeat + i - 1) % numberOfSeats + 1)).className=="taken"){
答案 4 :(得分:1)
你真正得到的是字符串连接,所以真正发生的是:
i = 10
seatNum = 1
(seatNum+i) = "110"
尝试使用parseInt()
函数将变量转换为整数类型:
if (document.getElementById("s"+(parseInt(startSeat)+parseInt(i))).className=="taken")
答案 5 :(得分:1)
在我看来,startSeat是一种字符串类型。即使JavaScript是无类型的,DOM对象的值也将默认为字符串。所以,你得到的是串联而不是添加。
使用CMS编写的内容。这应该可以解决你的问题。
答案 6 :(得分:0)
你可能会迭代一次太多次。在for循环中尝试i < seatNum - 1