我有一个简单的表格,每行都有一个复选框。如果用户单击此复选框,它将使用onClick功能并通过JS将信息发送到另一个PHP文件以删除带有id = $id
的ROW,它工作正常。当我单击多个复选框而不刷新站点时出现问题。
这是HTML的样子:
echo '<td><label class="checkbox-inline"><input type="checkbox" id="check" value="'.$row["id"].'" onClick="aa()"></label></td>';
JQuery是这样的:
function aa()
{
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "delete.php?id=" + document.getElementById("check").value, false);
xmlhttp.send(null);
document.getElementById("d1").innerHTML=xmlhttp.responseText;;
}
并完成我的.php文件:
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "DELETE FROM table1 WHERE id=$id";
$conn->exec($sql);
echo "Record deleted successfully";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
我仍然只是 amater,所以也许我想错了,但在我眼中,当用户点击 ChekBox 时,这个 JS 总是可以发送.php信息,那么为什么它不那样发送呢?
谢谢大家的建议。
问题就在这里:
input type="checkbox" id="check" ...
您为每个复选框提供 id"检查"。无论如何,这都会破坏事情,因为在 HTML 中,具有相同 ID 的页面上的元素不应超过元素。但这也意味着当你这样做时
document.getElementById("check")
它不知道你在说哪一行。
你不需要通过id获取元素;一个事件对象会自动传递给click函数,事件的目标将是复选框。
function deleteItem(e) {
var box = e.target;
var value = box.value;
// delete the value ...
}
有关事件参数 (e) 的信息,请参阅 http://javascript.info/tutorial/obtaining-event-object
最简单的方法是将行的 ID 值发送到 onClick 方法中。 这样,您只需要在方法中进行服务调用,而无需同时查找值(并且您知道获得的值是正确的)。
echo '<td><label class="checkbox-inline"><input type="checkbox" id="check" value="'.$row["id"].'" onClick="aa('.$row["id"].')"></label></td>';
此外,请确保输入的 ID 属性值对于每一行都是唯一的,因为这会导致执行 ID 查找时出现问题。
你根本没有使用Jquery。您应该定义在每个复选框中执行单击时要执行的函数。
$('[type="checkbox"]').click(function()
{
var sId = $(this).attr('id');
// call you ajax with this sId as the ID
});
但请记住,您必须在脑海中插入带有脚本标签的 jquery 库。而且在加载 dom 时必须调用此代码。
我看到的主要问题是
document.getElementById("checkbox")
它将始终引用相同的元素,并可能导致您的问题。 也许使用行 ID 将参数传递给 aa(),而不是使用元素的值,例如
echo (' ... onClick="aa('. $row["id"] .') ... ')