PHP如何确定用户是按Enter键还是"提交"按钮?

4 php forms submit form-submit

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

每当用户按下回车键时,就好像按下了最顶层的提交输入一样,这样就会导致代码检查点击哪个输入时出现问题.

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

Pet*_*ley 11

如果正确构建HTML,您可以确定使用了哪个按钮

<input type="submit" name="action" value="Edit">
<input type="submit" name="action" value="Preview">
<input type="submit" name="action" value="Post">
Run Code Online (Sandbox Code Playgroud)

$_POST阵列(或$_GET/$_REQUEST)将包含键"动作"与颁布按钮的值(是否点击或没有).

现在,"点击"显然是客户端行为 - 如果您想要区分点击和按键,您需要在表单中添加一些脚本以帮助确定.

编辑

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

<?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>
Run Code Online (Sandbox Code Playgroud)

  • 罗伯托,按下输入时选择源中的第一个提交按钮.因此,用户通过按Enter键选择它是否知道. (4认同)
  • 嗯......是的.源序列的第一个将被浏览器"选择"为提交者. (3认同)

Mik*_*scu 5

罗伯托,

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

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

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

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