4

我遇到的问题是我在一个表单中有多个提交输入。这些提交输入中的每一个都有不同的值,我更愿意将它们保留为提交。

每当用户按下Enter时,就好像按下了最上面的提交输入,因此它会导致代码检查哪个输入被单击了问题。

PHP有没有办法确定输入是否被单击,或者只是用户按下Enter键时选择的输入?

4

5 回答 5

10

只要您正确构建 HTML,您就可以确定使用了哪个按钮

<input type="submit" name="action" value="Edit">
<input type="submit" name="action" value="Preview">
<input type="submit" name="action" value="Post">

$_POST数组(或)将$_GET/$_REQUEST包含键“action”和已执行按钮的值(无论是否单击)。

现在,“点击”显然是一种客户端行为——如果您想区分点击和按键,您需要在表单中添加一些脚本来帮助确定。

编辑

或者,您可以“偷偷摸摸”并使用隐藏的提交,该提交应正确识别提交的按键,但这可能会对可访问性产生重大影响。

<?php

if ( 'POST' == $_SERVER['REQUEST_METHOD'] )
{
    echo '<pre>';
    print_r( $_POST );
    echo '</pre>';
}

?>
<form method="post">

    <input type="text" name="test" value="Hello World">

    <input type="submit" name="action" value="None" style="display: none">
    <input type="submit" name="action" value="Edit">
    <input type="submit" name="action" value="Preview">
    <input type="submit" name="action" value="Post">

</form>
于 2009-04-27T20:29:11.347 回答
5

罗伯托,

PHP 是服务器端技术,因此在服务器上运行 - 因此它无法确定在客户端(也就是用户)按下了哪些键。也就是说,当然,除非您专门对客户端进行编码以在服务器请求中包含此类信息(发布表单数据也是一种请求形式)。

实现这一目标的一种方法是在您的客户端代码中使用 Javascript。

请参阅此页面作为有关使用 Javascript 处理表单提交事件的起点。 http://www.w3schools.com/jsref/jsref_onSubmit.asp

您可能还必须为页面上的按键事件添加侦听器,以便捕获用户按下 Enter 键,然后记录此信息。 http://www.howtocreate.co.uk/tutorials/javascript/domevents讨论了在 Javascript 中添加/删除事件侦听器的主题,但是在使用事件时必须非常小心,因为使用不当它们可能是难以调试并导致用户不满意的内存泄漏:)

于 2009-04-27T20:27:41.647 回答
2

单独的 PHP 无法确定表单提交事件是如何触发的,因为这发生在客户端,而 PHP 是一种服务器端语言。您必须实现 Javascript 来监听 - 并记录到服务器端 - 按键和鼠标点击,然后分析这些数据以找到您正在寻找的内容。

现在,PHP 可以判断哪个提交输入被触发了,因为它会出现在表单数据中,而其他的则不会。大多数浏览器将第一个提交输入设置为默认值(按Enter键触发的输入)。您可以重新排序所有提交,以控制触发哪个提交。

于 2009-04-27T20:30:24.527 回答
1

PHP 无法真正知道客户端发生了什么。

我建议使用 javascript。当用户执行操作时,将其捕获并将其存储在将与表单一起提交的隐藏字段中。您还可以跟踪哪些输入处于活动状态并将其存储在隐藏字段中。

代码会有点像那样(我没有检查语法)

<input type="text" onfocus="setCurrent(this)" id="1" />
<input type="hidden" id="hid" />

function setCurrent(o){
  $('hid').value = o.id;
}

我认为玩事件捕获和隐藏字段应该会给你想要的结果。

希望有帮助

于 2009-04-27T20:34:48.120 回答
1

这是您在客户端编写标记的方式。

例如,这是您可以执行此操作的一种(非 XHTML)方式:

在 HTML 文件中:

<form method="post" action="myform.php" id="myform">
  ... form items here ...

<input type="submit" name="enter_key" value="true" style="display:none">
<input type="hidden" name="pressed_button" id="pressed_button" value="false">
<input type="button" value="Submit"
  onclick="document.getElementById('pressed_button').value='true';document.getElementById('myform').submit();">
</form>

在 myform.php 中:

if ($_POST['pressed_button']=='false') {
   // Logic for enter key
} else {
   // Logic for button press
}
于 2009-04-27T20:38:18.640 回答