我有一个简单的表格,每行都有一个复选框。如果用户单击此复选框,则使用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();
}
我仍然只是一个人,所以也许我错了,但在我看来,这个JS总是在用户clck ChekBox时发送.php信息,为什么不发送它呢?
谢谢大家的建议。
答案 0 :(得分:1)
问题在于:
input type="checkbox" id="check" ...
您正在为每个复选框提供ID“check”。这会破坏事情,因为在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
答案 1 :(得分:0)
你根本就没有使用Jquery。您应该在每个复选框中执行单击时定义要执行的功能。
$('[type="checkbox"]').click(function()
{
var sId = $(this).attr('id');
// call you ajax with this sId as the ID
});
但请记住,您必须在头部插入带有脚本标记的jquery库。并且在加载dom时必须调用此代码。
答案 2 :(得分:0)
我看到的主要问题是
document.getElementById("checkbox")
总是引用相同的元素,可能会导致您的问题。也许可以使用行id将参数传递给aa()而不是使用元素的值,例如
echo (' ... onClick="aa('. $row["id"] .') ... ')
答案 3 :(得分:0)
最简单的方法是将行的ID值发送到onClick方法。这样您只需要在方法中进行服务调用,而不是查找值(并且您知道您获得的值将是正确的。)
echo '<td><label class="checkbox-inline"><input type="checkbox" id="check" value="'.$row["id"].'" onClick="aa('.$row["id"].')"></label></td>';
&#13;
另外,请确保您的输入ID属性值对于每一行都是唯一的,因为这会导致ID查找出现问题。