意外的标识符 [object Object]

Unexpected identifier [object Object]

var costBusRoute = 600;
var busRoute = 0;
var vehCountBus = 0;
var routesBus = [{number:0, vehCount:0}];
var maintBus = 50;

function newBusRoute() {
    busRoute += 1;
    routesBus.push({number:busRoute, vehCount:0});
    viewRoutes(routesBus, "busRoutes", busRoute);
}

function newBus(routenum) {
    vehCountBus += 1;
    routenum.vehCount += 1;
    capacity += 50;
    bank -= 600;
    checkBank();
    checkCapacity();
    eiv += 99;
    checkEIV();
    updateVehNum(routenum);
}

function viewRoutes(routelist, listhtml, routenum) {
    document.getElementById(listhtml).innerHTML = "";
    for (I in routelist) {
        nameList = "<li class='list'><button onclick='editRoute("+routelist+","+routelist[routenum]+")'>" + routelist[I].number + "</button></li>";
        document.getElementById(listhtml).innerHTML += nameList;
    }
}

function editRoute(routelist, routenum) {
    $("#mainContainer").fadeOut();
    document.getElementById("screen").innerHTML = (
        "<h1>Bus Route " + routelist[routenum].number + "</h1>" +
        "<div id='vehicleNum'><p>Vehicles on this route: " + routelist[routenum].vehCount + "</div>" +
        "<p><button onclick='newBus("+routelist[routenum].number+")'>+ Add Vehicle | £600</button><p>Maintenance: £50 per day" +
        "<p><button onclick='delBus("+routelist[routenum].number+")'>- Remove Vehicle</button>" +
        "<p><button onclick='delRoute("+routelist[routenum].number+")'>- Delete Route</button>"
    );
}

我已经搜索了几个小时,但一直无法弄清楚为什么会引发错误或如何解决它。非常感谢任何建议!

我正在尝试将正确的元素从 routesBus 发送到 editRoute(),以便它可以编辑该特定元素中的键值。错误发生在 editRoute(),并在控制台中显示为 Uncaught SyntaxError: Unexpected identifier

我认为存在各种问题:

  1. 如评论中所述,您尝试通过直接连接数组来将数组添加为参数...以及其余参数。
nameList = "<li class='list'><button onclick='editRoute("+routelist+","+routelist[routenum]+")'>" + routelist[I].number + "</button></li>";

你得到的只是像这样的字符串:

<li class='list'><button onclick='editRoute([object Object],[object Object]...
  1. 除此之外,editRoute 需要 array (routelist) 和 number (routenum),数组中项目的索引,当你调用它时,你(试图)给出数组和项目,而不是索引。

  2. viewRoutes 中,您在同一行中同时使用作为参数给出的索引 routenum 和索引 I。这是不一致的。您应该放弃第一个,因为您正在构建整个列表并且 routenum 索引在这里似乎没有用。如果在构建列表时,您想在 I == routenum 时做一些特别的事情(将文本设置为粗体,使用特殊颜色或图标...)。

为了修复 1 和 2,我宁愿使用索引作为你的 editRoute 函数的唯一参数,因为你可以构建 html 调用它更容易,因为参数 routelist 对应于 routesBus,可从 editRoute.

获得
var costBusRoute = 600;
var busRoute = 0;
var vehCountBus = 0;
var routesBus = [{number:0, vehCount:0}];
var maintBus = 50;

function newBusRoute() {
    busRoute += 1;
    routesBus.push({number:busRoute, vehCount:0});
    viewRoutes("busRoutes");
}

function newBus(routenum) {
    vehCountBus += 1;
    routenum.vehCount += 1;
    capacity += 50;
    bank -= 600;
    checkBank();
    checkCapacity();
    eiv += 99;
    checkEIV();
    updateVehNum(routenum);
}

function viewRoutes(listhtml) {
    let nameList  = "";
    for (I in routelist) {
        nameList += `<li class='list'><button onclick='editRoute(${routenum})'>${routesBus[I].number}</button></li>`;

    }
    document.getElementById(listhtml).innerHTML = nameList;
}

function editRoute(routenum) {
    $("#mainContainer").fadeOut();
    let route = routesBus[routenum];
    let number = route.number; //isn't always route.number === routenum?
    // TODO use template literal for the following
    document.getElementById("screen").innerHTML = (
        "<h1>Bus Route " + number + "</h1>" +
        "<div id='vehicleNum'><p>Vehicles on this route: " + route.vehCount + "</div>" +
        "<p><button onclick='newBus("+ number +")'>+ Add Vehicle | £600</button><p>Maintenance: £50 per day" +
        "<p><button onclick='delBus("+ number + ")'>- Remove Vehicle</button>" +
        "<p><button onclick='delRoute(" + number  + ")'>- Delete Route</button>"
    );
}

请注意,我在 viewRoutes 上使用了 template literals,您应该尽可能多地使用它。检查我更改的其他地方。 另一件事:因为您正在使用 JQuery,所以您宁愿学习一下它,尤其是 .click() 以及如何使用它附加元素,这将是一个很大的改进。