使用复选框从数据库中获取行ID

时间:2013-11-25 13:58:29

标签: javascript html jsp checkbox

我正在尝试使用复选框从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>

MS access database screenshot

image 2

1 个答案:

答案 0 :(得分:1)

如果我的猜测是正确的,你想检查行(行)并从UI和数据库中删除它。 从UI中删除表行更容易。首先,您需要为每一行设置id(必须是唯一的)(在您的情况下可能是e​​mp 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而不是rowId中使用此empIds。 PS 您需要在java中使用Integer / String数组来获取这些值。

firebug控制台的

屏幕截图 Firebug inspecting console