JS- onClick on many things

时间:2015-02-02 21:10:30

标签: javascript php jquery

我有一个简单的表格,每行都有一个复选框。如果用户单击此复选框,则使用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信息,为什么不发送它呢?

谢谢大家的建议。

4 个答案:

答案 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方法。这样您只需要在方法中进行服务调用,而不是查找值(并且您知道您获得的值将是正确的。)

&#13;
&#13;
echo '<td><label class="checkbox-inline"><input type="checkbox" id="check" value="'.$row["id"].'" onClick="aa('.$row["id"].')"></label></td>';
&#13;
&#13;
&#13;

另外,请确保您的输入ID属性值对于每一行都是唯一的,因为这会导致ID查找出现问题。