禁用提交按钮时,PHP重定向不起作用

时间:2011-05-27 05:58:37

标签: php javascript http header

在我的index.php页面中,我有一个提交按钮,它接收表单数据并通过POST发送到update.php页面。在这个新页面上,数据库被操纵,然后重定向(使用PHP)回到原始页面。这个重定向过程在Firefox中运行良好,但在Chrome / IE中似乎不起作用。

index.php文件中的相关代码:

<form name="battle" action="update.php" method="post">
<input type="radio" name="update" value="<?php print($names[0] . "+" . $names[1]); ?>" />
<input type="radio" name="update" value="<?php print($names[1] . "+" . $names[0]); ?>" />
<input type="submit" name="submit" value="Submit" />
</form>

这是我的update.php文件末尾的代码:

$con->close();
session_write_close();
header("Status: 200");
header( "Location: index.php" );
exit(0);

如果onClick上的提交按钮已禁用,则此代码 将在所有浏览器中运行,但我确实需要具备此功能。有没有人知道如何使这个重定向工作,同时仍然有禁用按钮fetleure?

3 个答案:

答案 0 :(得分:1)

我猜你正在使用javascript禁用提交按钮以防止多次提交。如果您通过设置提交按钮的禁用属性来执行此操作,那么这不是最好的方法,因为它可能有副作用。

如果要阻止使用javascript进行多次提交,更好的方法是将事件处理程序附加到表单提交事件,该事件仅在您第一次触发提交事件时返回true。

function submitHandler ()
{
    if (typeof submitHandler.triggered == 'undefined')
    {
        submitHandler.triggered = true;
        return true;
    }
    else
    {
        return false;
    }
}

将上述内容附加到表单的提交事件中。这应该可以防止多次提交,并且还可以避免禁用提交按钮可能导致的问题。

答案 1 :(得分:1)

在表单提交上禁用提交按钮可能是一件棘手的事情。这对我有用:

NB:需要&gt; = jQuery1.6才能正常工作

test.php的:

<script type="text/javascript">
$(document).ready(function ()
{
    $("form").submit(function ()
    {
        $("input[type='submit']").prop("disabled", true);
    })
})
</script>

<form name="battle" action="update.php" method="post">
    <input type="radio" name="update" value="foo" />
    <input type="radio" name="update" value="bar" />
    <input type="submit" name="submit" value="Submit" />
</form>

update.php:     

header("Status: 200");
header( "Location: index.php" );
exit(0);

?>

答案 2 :(得分:0)

我最近遇到了同样的问题,这就是我在所有浏览器中所做的修复

$(document).ready(function () {
     $("input[type='submit']").click(function () {
         $(this).attr('disabled','true');
         // validate data
         ...

         // when data is valid send form else enable form
         $('form[name="battle"]').submit();
      })

 });

现在您的表单数据将在任何浏览器中发送。试着让我知道它是怎么回事:))