"Uncaught SyntaxError: Unexpected token }"

"Uncaught SyntaxError: Unexpected token }"

我不知道这个语法错误是从哪里来的。它在我的控制台中显示为 index.html:2,但这似乎不正确。

这是我的 javascript:

$('#add').click(function (event) {
    event.preventDefault();
    var newItem = document.momList.newItem.value;
    if (newItem) {
        var $listItem = $('<li id="' + newItem + '"><button class="delete" onclick="removeListItem("' + newItem + '");">X</button></li>');
        var $item = $('<span class="item">').text(newItem);
        $listItem.append($item);
        $('#list').append($listItem);
    }
});

function removeListItem(itemID) {
    var el = document.getElementById(itemID);
    el.remove();
}

这是 HTML:

<head>
    <meta charset="UTF-8">
    <title>Mother's Shopping List</title>
    <link rel="stylesheet" href="styles.css">
</head>

<body>
    <header>
        <h1>Mother's Shopping List</h1>
    </header>
    <main>
        <form name="momList">
            <input id="newItem" type="text" required>
            <input type="submit" id="add" value="Add" class="add">
        </form>
        <div class="shoppingList">
            <ul id="list" class="shoppingList"></ul>
        </div>
    </main>
    <script src="bower_components/jquery/dist/jquery.js"></script>
    <script type="text/javascript" src="main.js"></script>
</body>
</html>

我想做的是在单击添加按钮时创建一个新的列表项。每个列表项都有一个删除按钮,我想在单击时删除该列表项。我无法使用删除按钮。

引号似乎导致 onclick 出现问题。使用 \' 添加转义的 ' 代替 onclick 的引号,它应该可以正常工作。 https://jsfiddle.net/5nnvu7vn/3/

$('#add').click(function (event) {
    event.preventDefault();
    var newItem = document.momList.newItem.value;
    if (newItem) {
        var $listItem = $('<li id="' + newItem + '"><button class="delete" onclick="removeListItem(\'' + newItem + '\');">X</button></li>');
        var $item = $('<span class="item">').text(newItem);
        $listItem.append($item);
        $('#list').append($listItem);
    }
});

function removeListItem(itemID) {
    var el = document.getElementById(itemID);
    el.remove();
}

我建议使用绑定到 html 属性之外的按钮的事件处理程序:

$('#add').click(function (event) {
    event.preventDefault();
    var newItem = document.momList.newItem.value;
    if (newItem) {
        var $listItem = $('<li id="' + newItem + '"><button class="delete">X</button></li>');
        var $item = $('<span class="item">').text(newItem);
        $listItem.append($item);
        $('#list').append($listItem);
    }
});

$(document).on("click", ".delete", function (e) {
    console.log("im here");
    var el = $(e.target).parent();
    el.remove();
});

这可以防止双引号等问题,并且是一个更简洁的解决方案,因为 JavaScript 不在 html 中。