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

HTML-单击按钮以获取表单元格值

  •  0
  • Assaf  · 技术社区  · 7 年前

    我的目标-点击一个按钮,获取产品价值,加入购物车。

    我有一个HTML页面,我想在其中单击一个按钮并获取productID值,为了获取它,请插入购物车。 每次加载页面时,都会从数据库中提取要添加到购物车中的记录。

    问题是,当我按下按钮时,即使我用一个ID连接它,我只得到第一个记录,而且似乎按钮根本没有连接到表上。

    我附上了一张照片来展示这个页面的样子- enter image description here

    代码如下:

        <!DOCTYPE html>
    <html xmlns:th="http://www.w3.org/1999/xhtml">
    <head>
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
        <style>
            * {box-sizing: border-box;}
    
            body {
                margin: 0;
                font-family: Arial, Helvetica, sans-serif;
            }
    
            .topnav {
                overflow: hidden;
                background-color: #e9e9e9;
            }
    
            .topnav a {
                float: left;
                display: block;
                color: black;
                text-align: center;
                padding: 14px 16px;
                text-decoration: none;
                font-size: 17px;
            }
    
            .topnav a:hover {
                background-color: #ddd;
                color: black;
            }
    
            .topnav a.active {
                background-color: #2196F3;
                color: white;
            }
    
            .topnav .search-container {
                float: right;
            }
    
            .topnav input[type=text] {
                padding: 6px;
                margin-top: 8px;
                font-size: 17px;
                border: none;
            }
    
            .topnav .search-container button {
                float: right;
                padding: 6px 10px;
                margin-top: 8px;
                margin-right: 16px;
                background: #ddd;
                font-size: 17px;
                border: none;
                cursor: pointer;
            }
    
            .topnav .search-container button:hover {
                background: #ccc;
            }
    
            @media screen and (max-width: 600px) {
                .topnav .search-container {
                    float: none;
                }
                .topnav a, .topnav input[type=text], .topnav .search-container button {
                    float: none;
                    display: block;
                    text-align: left;
                    width: 100%;
                    margin: 0;
                    padding: 14px;
                }
                .topnav input[type=text] {
                    border: 1px solid #ccc;
                }
            }
        </style>
    </head>
    <div class="topnav">
        <a class="active" href="/search">Home</a>
        <a href="/about">About</a>
        <a href="/contact">Contact</a>
        <div class="search-container">
            <form action="/results">
                <input type="text" placeholder="Search.." name="search">
                <button type="submit"><i class="fa fa-search"></i></button>
            </form>
        </div>
    </div>
    
    <div style="padding-left:16px">
    </div>
    
    <style>
        table {
            border-collapse: collapse;
            border-spacing: 0;
            width: 100%;
            border: 1px solid #ddd;
        }
    
        th, td {
            text-align: left;
            padding: 16px;
        }
    
        tr:nth-child(even) {
            background-color: #f2f2f2
        }
    </style>
    </head>
    <body>
    
    <h2>Search Results</h2>
    
    <table id="products">
        <tr>
            <th>Product ID</th>
            <th>Name</th>
            <th>Brand</th>
            <th>Rating</th>
            <th>Price</th>
            <th>Availability</th>
    
            <tr th:each="product : ${results}">
                <td th:text="${product.productId}" id="productId"></td>
                <td th:text="${product.productName}"></td>
                <td th:text="${product.brand}"></td>
                <td th:text="${product.rating}"></td>
                <td th:text="${product.price}"></td>
                <td th:text="${product.availableInStock}"></td>
                <td><button onclick="myfunction()" class="btn-select" type="button" id="buttonc">Add to cart</button></td>
            </tr>
    
    </table>
    
    
    <script>
        function myfunction() {
            alert(document.getElementById("productId").outerText);
    
    
    
        }
    </script>
    
    </body>
    </html>
    
    3 回复  |  直到 7 年前
        1
  •  1
  •   Unmitigated    7 年前

    您的所有按钮都将调用相同的函数,从而使您无法确定应该将哪个产品添加到购物车中。你应该给按钮一个数据属性,比如 data-productid 并将其作为参数传递给函数( this.dataset.productid )以获取应添加到购物车的产品的ID。还应为其中一个表单元格提供产品ID的ID,并使用 document.getElementById(productid).parentNode .

    另外,您的HTML也有一些语法错误,比如在正文和两端之前有HTML(头)。 </head> 标签。

    <!DOCTYPE html>
    <html xmlns:th="http://www.w3.org/1999/xhtml">
    <head>
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
        <style>
            * {box-sizing: border-box;}
    
            body {
                margin: 0;
                font-family: Arial, Helvetica, sans-serif;
            }
    
            .topnav {
                overflow: hidden;
                background-color: #e9e9e9;
            }
    
            .topnav a {
                float: left;
                display: block;
                color: black;
                text-align: center;
                padding: 14px 16px;
                text-decoration: none;
                font-size: 17px;
            }
    
            .topnav a:hover {
                background-color: #ddd;
                color: black;
            }
    
            .topnav a.active {
                background-color: #2196F3;
                color: white;
            }
    
            .topnav .search-container {
                float: right;
            }
    
            .topnav input[type=text] {
                padding: 6px;
                margin-top: 8px;
                font-size: 17px;
                border: none;
            }
    
            .topnav .search-container button {
                float: right;
                padding: 6px 10px;
                margin-top: 8px;
                margin-right: 16px;
                background: #ddd;
                font-size: 17px;
                border: none;
                cursor: pointer;
            }
    
            .topnav .search-container button:hover {
                background: #ccc;
            }
    
            @media screen and (max-width: 600px) {
                .topnav .search-container {
                    float: none;
                }
                .topnav a, .topnav input[type=text], .topnav .search-container button {
                    float: none;
                    display: block;
                    text-align: left;
                    width: 100%;
                    margin: 0;
                    padding: 14px;
                }
                .topnav input[type=text] {
                    border: 1px solid #ccc;
                }
            }
        table {
            border-collapse: collapse;
            border-spacing: 0;
            width: 100%;
            border: 1px solid #ddd;
        }
    
        th, td {
            text-align: left;
            padding: 16px;
        }
    
        tr:nth-child(even) {
            background-color: #f2f2f2
        }
    </style>
    </head>
    <body>
    <div class="topnav">
        <a class="active" href="/search">Home</a>
        <a href="/about">About</a>
        <a href="/contact">Contact</a>
        <div class="search-container">
            <form action="/results">
                <input type="text" placeholder="Search.." name="search">
                <button type="submit"><i class="fa fa-search"></i></button>
            </form>
        </div>
    </div>
    
    <div style="padding-left:16px">
    </div>
    
    <h2>Search Results</h2>
    
    <table id="products">
        <tr>
            <th>Product ID</th>
            <th>Name</th>
            <th>Brand</th>
            <th>Rating</th>
            <th>Price</th>
            <th>Availability</th>
    
            <tr th:each="product : ${results}">
                <td th:text="${product.productId}" id="${product.productId}"></td>
                <td th:text="${product.productName}"></td>
                <td th:text="${product.brand}"></td>
                <td th:text="${product.rating}"></td>
                <td th:text="${product.price}"></td>
                <td th:text="${product.availableInStock}"></td>
                <td><button onclick="myfunction(this.dataset.productid)" class="btn-select" type="button" data-productid="${product.productId}">Add to cart</button></td>
            </tr>
    
    </table>
    
    
    <script>
        function myfunction(productId) {   
        alert(productId);
        var row = document.getElementById(productId).parentNode;
        console.log(row);
        }
    </script>
    
    </body>
    </html>
        2
  •  0
  •   Anderson Urrego Restrepo    7 年前

    调用javascript函数myfunction($product.product id)并更改javascript函数myfunction(id)时,请尝试此操作。

        3
  •  0
  •   AHB    7 年前

    问题是所有的按钮都将调用 myfunction 它只获取第一个productID并使用该outerText,而不表示实际单击了哪个按钮。

    你可以把一个论点传给 我的功能 ,例如 productId 或者可以使用事件对象, https://developer.mozilla.org/en-US/docs/Web/API/Event ,从您的单击处理程序内部,计算出从中单击的内容。

    我还建议您避免为此使用ID,因为它们在页面上是唯一的。

    如果你需要更具体的帮助,请告诉我!