【问题标题】:Get row id from database using checkboxes使用复选框从数据库中获取行 ID
【发布时间】:2013-11-25 23:35:32
【问题描述】:

我正在尝试使用复选框从我的 MS 访问数据库中删除一行。我将数据库输出到我的 JSP 页面,每一行都有一个复选框。我无法获取 rowId 并将每个复选框与一行链接。任何帮助将非常感激。谢谢。

<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>

<html>
<head>
<title>DELETE Operation</title>
<script>
     checkboxes = document.getElementsByTagName("input"); 

     for (var i = 0; i < checkboxes.length; i++) {
         var checkbox = checkboxes[i];
         checkbox.onclick = function() {
             var currentRow = this.parentNode.parentNode;
             var secondColumn = currentRow.getElementsByTagName("td")[1];

             alert("My text is: " + secondColumn.textContent );
         };
    }
</script>
</head>
<body>

<sql:setDataSource
    var = "bookdB"
    scope = "session"
    driver = "sun.jdbc.odbc.JdbcOdbcDriver"
    url = "jdbc:odbc:bookdB"
/>

<c:set var="empId" value="103"/>

<sql:update dataSource="${bookdB}" var="count">
  DELETE FROM Employees WHERE Id = ?
  <sql:param value="${empId}" />
</sql:update>

<sql:query dataSource="${bookdB}" var="result">
   SELECT * from Employees;
</sql:query>

<table border="1" width="100%">
<tr>
   <th></th>
   <th>Emp ID</th>
   <th>First Name</th>
   <th>Last Name</th>
   <th>Age</th>
</tr>

<c:forEach var="row" items="${result.rows}">
<form method="post" action="reserve.jsp">
<tr>
   <td><input type = "checkbox" value="reserve"></td>
   <td><c:out value="${row.id}"/></td>
   <td><c:out value="${row.first}"/></td>
   <td><c:out value="${row.last}"/></td>
   <td><c:out value="${row.age}"/></td>
</tr>
</form>
</c:forEach>
<input type = "submit" value="Delete">
</table>

</body>
</html>

【问题讨论】:

    标签: javascript html jsp checkbox


    【解决方案1】:

    如果我的猜测是正确的,您想检查行(行)并将其从 UI 以及数据库中删除。 从 UI 中删除表格行要容易得多。首先,您需要为每一行设置 id(必须是唯一的)(在您的情况下可能是 emp id)。像这样,

    <table>
    <tr id="${row.id}">
        <td><input type = "checkbox" value="${row.id}"></td>
        <td><c:out value="${row.id}"/></td>
        <td><c:out value="${row.first}"/></td>
        <td><c:out value="${row.last}"/></td>
        <td><c:out value="${row.age}"/></td>
    </tr>
    </table>
    <input type="button" value="delete" onclick="deleteEmployee('${row.id}');" />
    

    这里请注意,我不会出于删除目的而刷新页面。

    在脚本方面,

    <script type="text/javascript">
    function deleteEmployee(rowid){
    input_box = confirm("Are you sure you want to delete this Record?");
    if (input_box == true) {
        // Output when OK is clicked
        $.ajax({
        url : 'ur_ajax_url_for_delete'+rowid,
        type : "POST",
        async : false,
        success : function() {
            $('#' + rowid).remove();
            alert('Record Deleted');
        }
           });
    
    return false;
    } else {
        // Output when Cancel is clicked
        return false;
    }
      }
    </script>
    

    如果这有帮助,请告诉我。您必须在 ajax url 中实现您的编程逻辑才能删除选定的记录。

    更新: 如果您正在寻找选择多个复选框并想一次性删除, 您需要使用 javascript 获取所有选中的复选框值。像这样, 在 html 中为复选框使用名称属性

    <input type = "checkbox" value="${row.id}" name="empIds">
    

    在脚本方面,

    var empIds = [];
    $('#empIds > :selected').each(function() {
    empIds.push($(this).val());
    });
    

    在 ajax url 中使用这个 empIds 而不是 rowId。 PS你需要在java中使用Integer/String数组来获取这些值。

    萤火虫控制台的屏幕截图

    【讨论】:

    • 嗨维诺特。谢谢,这确实有很大帮助。我进行了您建议的更改,但我仍然无法删除记录。弹出删除确认后,我选择“是”。记录还在。
    • 您是否在控制台中发现任何 javascript 错误?如果是这样解决它。还要查找是否已将行 ID 设置为每一行。
    • $('#' + rowid).remove(); 这只会在您的 ajax 响应为真时发生。因此,请检查您的 java 代码该行是否被删除。
    • 我没有收到任何 javascript 错误。我无法判断是否已将行 ID 设置为每一行。我该怎么做?
    • 行没有被删除
    猜你喜欢
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 2011-12-10
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    相关资源
    最近更新 更多