【问题标题】:How can I prevent WebKit browser to submit a form when enter is pressed in an input [duplicate]在输入中按下输入时如何防止WebKit浏览器提交表单[重复]
【发布时间】:2010-10-19 14:21:28
【问题描述】:

当使用具有许多文本输入的表单时,WebKit/Safari/Google Chrome 会在任何输入元素中按下“输入”时提交表单。即使没有提交输入元素,也没有注册 onclick 处理程序。

例如看这个示例代码:

<html>
    <body>
        <form method="POST" action=".">
            <ul>
                <li><input type="text" name="foo" value="<?=rand()?>"/></li>
                <li><input type="text" name="bar" value="<?=$_POST['foo']?>"/></li>
            </ul>
        </form>
    </body>
</html>

当在两个文本输入元素中的任何一个中按下回车键时,表单被提交。

由于我在 JavaScript 中使用异步 HTTP 请求处理表单,因此我需要防止这种行为。我可以将 keypressed 事件的自定义处理程序注册到 preventDefaultstopPropagation 。但是当动态添加新的文本输入元素时,它看起来很丑陋并且不太实用。

【问题讨论】:

    标签: html safari google-chrome webkit submit


    【解决方案1】:

    Daniel A. White 是对的,但由于我对答案有点困惑,也许应该明确说明 return false 应该在事件上:

    function goWithSubmit(e)
    {
      if (e) e.returnValue=false;
    }
    

    【讨论】:

    • 谢谢!我想知道为什么 onsubmit="return false;" 不起作用。
    【解决方案2】:

    如果您不想提交表单,请不要包含

    元素。包含独立的表单字段元素是有效的。
    value="<?=$_POST['foo']?>"
    

    XSS 漏洞。您需要 htmlspecialchars() 所有文本到 HTML 的输出。

    【讨论】:

    • 如果你走这条路要记住的一点是,一些浏览器不会尝试记住表单数据>没有自动完成。
    【解决方案3】:

    监听表单上的onsubmit事件并返回false

    【讨论】:

    • 妈的,我慢了一分钟
    猜你喜欢
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 2016-05-11
    • 2010-10-21
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    相关资源
    最近更新 更多