【问题标题】:Javascript Redirect using setTimeout使用 setTimeout 进行 Javascript 重定向
【发布时间】:2012-08-14 21:25:14
【问题描述】:

我有一个按钮,我想运行一段脚本然后重定向,但是什么都没有发生

我有另一个页面使用类似的代码并且可以正常工作。但是这个是行不通的

工作代码:

<a href="javascript:void(0);" onclick='$.get("features.php",{ cmd: "confirm_order", id: "<?php echo $o_id; ?>", name: "<?php echo $_SESSION['user_name']; ?>" email: "<?php echo $_SESSION['user_email']; ?>"};setTimeout("window.location.href=order.php?order_id=<?php echo $o_id;?>", 100);' class="button">

已经在不同页面上运行的代码:

<a href="javascript:void(0);" onclick='$.get("features.php",{ cmd: "remove", id: "<?php echo $o_id; ?>", prod: "<?php echo $row_prod['prod_id']; ?>" });setTimeout("window.location.href=window.location.href", 100);'>

现在我知道这完全与我的 setTimeout 有关,我只是不确定自己做错了什么。

编辑

立即链接:

<a href="javascript:void(0);" class="button confirm">Confirm</a>

链接下方的代码:

<script type="text/javascript">
$('a .confirm').on('click',function(e){
    $.get("features.php",{
        cmd: "confirm_order",
        id: "<?php echo $o_id; ?>",
        name: "<?php echo $_SESSION['user_name']; ?>",
        email: "<?php echo $_SESSION['user_email']; ?>"
    });
    setTimeout(
        function(){
            window.location = "order.php?order_id=<?php echo $o_id;?>" 
        },
    100);
});
</script>

仍然无法正常工作,并在代码中呈现\"

【问题讨论】:

  • 我真的不会在 HTML 属性中放入这么多代码。创建一个函数,如果你真的无法通过 JavaScript 分配函数,请在属性中调用它。
  • 您的代码有点难以阅读...这可能会增加您的问题

标签: javascript redirect settimeout


【解决方案1】:

我同意 Felix Kling 的评论,即您不应该向 html 属性添加那么多代码。我看到您正在使用 jQuery,所以为什么不将其添加到您的 javascript 代码中:

$('a .button').on('click',function(e){
    $.get("features.php",{ 
          cmd: "confirm_order",
          id: "<?php echo $o_id; ?>",
          name: "<?php echo $_SESSION['user_name']; ?>", // you were missing this comma 
          email: "<?php echo $_SESSION['user_email']; ?>"
        }).done(function(){
             window.setTimeout( function(){
                 window.location = "order.php?order_id=<?php echo $o_id;?>";
             }, 100 );
        }); // you where missing this parenthesis          

  e.preventDefault(); 
});

【讨论】:

  • 嗯。谢谢我试了一下,但它仍然坐在那里。我编辑了我的原始帖子,向您展示我的更新
  • 有什么我需要添加到我的链接中才能运行的吗?
  • 我编辑了 setTimeOut 第一个参数,以便它接收一个函数,这样你就不必担心字符会弄乱你的链接,我认为你没有必要添加 window.location.href , window.location 会做
  • 谢谢,但是当我点击链接时仍然没有任何反应?我想在我的链接中添加一些东西吗?
  • 你删除了e.preventDefault() 吗?
【解决方案2】:

尝试将您的文件名放在" 之间(您可以使用\" 对其进行转义):

setTimeout("window.location.href=\"order.php?order_id=<?php echo $o_id;?>\";", 100);

您的文件名是一个字符串。否则 JavaScript 会期望一个变量。这就是setTimeout("window.location.href=window.location.href;", 100); 起作用的原因。

我觉得还少了一个逗号:

name: "<?php echo $_SESSION['user_name']; ?>" email: "<?php echo $_SESSION['user_email']; ?>"

应该是name: "&lt;?php echo $_SESSION['user_name']; ?&gt;", email: "&lt;?php echo $_SESSION['user_email']; ?&gt;"

您还缺少一个括号。尝试将您的代码更改为:

<a href="javascript:void(0);" onclick='$.get("features.php",{ cmd: "confirm_order", id: "<?php echo $o_id; ?>", name: "<?php echo $_SESSION['user_name']; ?>", email: "<?php echo $_SESSION['user_email']; ?>"});setTimeout("window.location.href=\"order.php?order_id=<?php echo $o_id;?>\";", 100);return false;' class="button">

【讨论】:

  • 谢谢,我试过了,但由于整个函数都在' 之间,所以它不起作用,当我尝试\' 时它就坏了。
  • 函数在",而不是',所以应该没问题。
  • 逃逸 '\"。再次更新。
  • 对不起,我的意思是 onClick。然后当我尝试使用\" 时,它会在代码中呈现它。
【解决方案3】:

试试这个

<script type="text/JavaScript">
redirectTime = "1500";
redirectURL = "http://www.natural-environment.com";
function timedRedirect() {
    setTimeout("location.href = redirectURL;",redirectTime);
}
</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多