0

return_url仅在倒计时结束后才尝试提交文档 ( )。在我下面的当前代码中,文档是在倒计时开始后提交的。如何在提交之前完成倒计时document_url

代码:

<body>
    <center>
        <form name="redirect"><font face="Helvetica"><b>
            Thank you! You will be redirected in<input type="text" size="1" style="font-size:25px" name="redirect2">seconds.</b></font>
        </form></form>
    </center>

    <form name="return_url" method="post" action="confirm.php">
        <input type="hidden" name="order" value="1" />
        <input type="hidden" name="price" value="100" />
    </form>
</body>
</html>

<script language="javascript" type="text/javascript">
    var targetURL="<?php print_r($_POST['url_retorno']);?>"
    var countdownfrom=10
    var currentsecond=document.redirect.redirect2.value=countdownfrom+1

    function countredirect(){
        if (currentsecond!=1){
            currentsecond-=1
            document.redirect.redirect2.value=currentsecond
        } else {
            window.location=targetURL
            return
        }
        setTimeout("countredirect()",1000)
    }

    countredirect()

    document.return_url.submit()    
</script>
4

2 回答 2

0

重要的是,您不应该自动为用户提交表单,这是一种糟糕的用户体验设计。相反,您可以在提交禁用按钮的内容之前等待,直到计时器结束。为此,您只需要使用 javascript 计时器。

var timer = window.setInterval(updateClock,1000);
var countdown = 10;
function updateClock() {
   countdown--;
   if(countdown<=0) {
       window.clearInterval(timer);
       //ALLOW THE FORM TO SUBMIT
       document.getElementById("elementID").disabled = false
   } else {
       document.getElementById("elementID").value = "PLEASE WAIT "+countdown+" SECONDS";
   }
}

我还补充一点,你永远不应该相信人们在表格中输入的内容。查找 XSS 或跨站点脚本,以及 SQL 注入以找出原因。所以你需要使用验证(即使是数字)。如果您想要页面验证(这仍然不是很安全,因为它可以被绕过),您可以向表单标签添加一个属性,以便在用户最终提交时onSubmit="validate()"调用该函数。validate()使用此函数还可以让您在需要时接管表单,因为您可以在那里执行您想要的任何 javascript,并且只需返回“false”值将导致表单不提交。

始终在服务器级别验证您的表单条目(即在 confirm.php 文件中)

于 2013-08-20T01:05:37.507 回答
0

尝试以下操作:

setTimeout(function() {document.return_url.submit();}, 10000);

这应该就是你所需要的。

或者如果你想显示计时器,使用 setInterval();

var seconds_left = 10;
var timer = setInterval(countdown, 1000);

function countdown() {
    seconds_left--;
    if (seconds_left) {
        console.log(seconds_left); //or modify the DOM
    } else {
        document.return_url.submit();
        clearInterval(timer);
    }
}
于 2013-08-20T01:05:52.370 回答