确定在使用按钮数组时单击了哪个提交按钮


Determining which Submit button was clicked, when an array of buttons is used

我有一个脚本,它生成一个包含许多行和列的表。在行的每一端都有一个Submit按钮,其名称是运行脚本时生成的数组之一,类似于:delete_CN[0]、delete_CN[1]等。

在处理表单POST时,我需要确定单击了哪个Submit按钮。目前,当我看到print_r或dump_vars时,我会看到以下内容:["delete_CN"]=> array(1) { [0]=> string(6) "Delete" },它不会给出所按下按钮的数组索引。

我应该如何最好地着手做这件事?我需要找到被按下的提交按钮的数组索引,或者以其他方式唯一标识提交按钮的行,以处理数据。原始表单是通过读取zonefile动态生成的,同一行上的元素都是数组。

发布数据将始终包括所有按钮,但只有单击的按钮才会有值。通过这种方式,您可以通过检查按钮数组中的哪个值不为空来轻松确定单击了哪个按钮。(该值将是按钮上的文本,因为该文本是在值属性中定义的)。

在HTML/PHP中,您可以将表中的每一行作为一个单独的表单,并添加一个

<input type="hidden" name="which_clicked" value="delete_CN[0]">

然后查找$_POST['hich_clicated']

或者,您可以使用jQuery并根据单击的提交按钮插入哪个值。

请注意,也可以使用ENTER键提交表单。如果发生这种情况,浏览器会像单击表单中的第一个按钮一样处理它。

显然,当焦点在提交按钮上时按ENTER键会使用当前焦点按钮发送表单。

我所做的是创建一个隐藏的输入类型数组,其中包含"唯一值",以及我们分配给每个按钮的值。例如输入type="hidden"name="txtID[]"id="txtID[]"value="15618",对于按钮输入type="submit"name="CityAdd15618"id="CityAdd15618"value="+"

然后当提交时,你只需要循环

$lTtl=count($_POST['txtID']);
for($lCtr1=0; $lCtr1<$lTtl; $lCtr1++)
{
    if (isset($_POST['CityAdd' . $_POST['txtID'][$lCtr1]]))
        break;
}
echo "ttl:" . $lCtr1 . "<br>'n";