代码之家  ›  专栏  ›  技术社区  ›  user48202

Javascript getElementById行为异常

  •  4
  • user48202  · 技术社区  · 16 年前

    这是:
    seatNum-循环通过的座椅数量

    当我尝试获取id命名约定为“s1”、“s2”和“s3”等的元素时,问题出现在for循环中s45“s46”等。。。基于添加到起始座椅的回路计数器。从0(起始座位)到seatNum(多少座位)计数。

    知道为什么by 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;
            }
        }
    }
    
    7 回复  |  直到 16 年前
        1
  •  7
  •   Community Mohan Dere    9 年前

    转换你的 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 他指出。

        2
  •  5
  •   Faruz    16 年前

    尝试向屏幕发出警报:

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

        3
  •  2
  •   Andrew Hare    16 年前

    试试这个:

    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 自从你 StartSat

        4
  •  1
  •   Mark Byers    16 年前

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

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

    if (document.getElementById("s"+((startSeat + i - 1) % numberOfSeats + 1)).className=="taken"){
    
        5
  •  1
  •   jaywon    16 年前

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

    i = 10
    seatNum = 1
    
    (seatNum+i) = "110"
    

    使用 parseInt() 用于将变量强制转换为整数类型的函数:

    if (document.getElementById("s"+(parseInt(startSeat)+parseInt(i))).className=="taken")
    
        6
  •  1
  •   Jeff Rupert    16 年前

    在我看来,StartSat是一种字符串类型。即使JavaScript没有类型,DOM对象的值也将默认为字符串。所以,你得到的是一个串联而不是加法。

        7
  •  0
  •   Kenaniah    16 年前

    您可能重复了太多次。尝试 i < seatNum - 1 在您的for循环中