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

Posted

技术标签:

【中文标题】确定在使用按钮数组时单击了哪个提交按钮【英文标题】:Determining which Submit button was clicked, when an array of buttons is used 【发布时间】:2013-07-19 09:07:39 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

html/php 中,您可以将表格中的每一行设为单独的表格,并添加一个

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

然后寻找 $_POST['which_clicked']

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

【讨论】:

对用户友好的按钮标签:D 超级用户友好,该按钮标签将为用户提供茶和饼干【参考方案3】:

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

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

【讨论】:

这是不正确的,它取决于焦点,你也可以抓住回车键并停止事件。 当焦点位于按钮上时,ENTER 使用它提交表单,没错。我相应地调整了我之前的评论。当javascript在游戏中时,一切都可能发生,这也是正确的。我上面的注释针对的是一个简单的案例,并描述了浏览器的默认行为。【参考方案4】:

我所做的是,我创建了一个隐藏的输入类型数组,具有“唯一值”,以及我们分配给每个按钮的值。例如输入 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";

【讨论】:

以上是关于确定在使用按钮数组时单击了哪个提交按钮的主要内容,如果未能解决你的问题,请参考以下文章

确定使用了哪个提交按钮?

我想在每次单击提交按钮时将对象存储在一个数组中,但是在每个提交按钮之后它将单个对象存储在一个数组中

CakePHP 2.0 确定点击了哪个提交按钮

jQuery验证两个提交按钮

如何确定 jQuery 表单插件中的活动提交按钮?

使用 Jquery 在第一次单击时禁用提交按钮