【问题标题】:Javascript getting into infinite loopJavascript进入无限循环
【发布时间】:2015-04-14 03:44:33
【问题描述】:

当我取消选中输入复选框时,share.php javascript 进入无限循环打开新窗口。

所有 3 项都被选中,没有问题发生。

在某些时候它会出错,但我找不到哪里。 我不知道为什么会这样

<form action="functions/share.php" method="POST" target="_blank">
    <p>
        <textarea class="form-control" style="resize: none;height: 90px;padding: 10px;border-radius: 3px;" name="summary" required>Build a fully customizable Personal Website in seconds - for free.</textarea>
    </p>

    <div class="text-center">
        <input type="checkbox" name="LinkedIn" value="yes" checked><i class="fa fa-linkedin"></i> 
        <input type="checkbox" name="FaceBook" value="yes" checked><i class="fa fa-facebook"></i>
        <input type="checkbox" name="Twitter" value="yes" checked><i class="fa fa-twitter"></i>
    </div>

    <p><input type="submit" class="btn btn-primary btn-lg btn-block" value="Share" ></p>
</form> 

share.php

<?php

    if(isset($_POST['summary'])){
        $linkedIn = "";
        $faceBook = "";
        $twitter = "";

        if($_POST['LinkedIn'] == "yes"){
            $linkedIn = "http://www.linkedin.com/";
        }

        if($_POST['FaceBook'] == "yes"){
            $faceBook = "http://www.facebook.com/";
        }

        if($_POST['Twitter'] == "yes"){
            $twitter = "http://www.twitter.com/";
        }

    }

?>
<html>
<body>
    <div id="linkedin" style="display: none;">
        <?php 
            echo htmlspecialchars($linkedIn); 
        ?>
    </div>
    <div id="facebook" style="display: none;">
        <?php 
            echo htmlspecialchars($faceBook); 
        ?>
    </div>
    <div id="twitter" style="display: none;">
        <?php 
            echo htmlspecialchars($twitter); 
        ?>
    </div>
    <script>

         var div = document.getElementById("linkedin");
         var linkedin= div.textContent;
         var div = document.getElementById("facebook");
         var faceBook= div.textContent;
         var div = document.getElementById("twitter");
         var twitter= div.textContent;

         if(linkedin != " "){

            window.open(linkedin);
         };
         if(faceBook != " "){

            window.open(faceBook);
         };
         if(twitter != " "){

            window.open(twitter);
         };

         close();

    </script>
</body>
</html>

【问题讨论】:

  • 将提交按钮命名为summary。为什么在你的php代码中使用htmlspecialchars?你不能在JS代码中使用你的php变量。你为什么要检查链接是否等于“”而不是“”?
  • js代码中没有php代码。摘要作为帖子发送,无需添加到按钮中。 htmlspecialchars 因为我需要将其保留为 html 代码而不是过滤文本。用 " " 而不是 "" 只是一个尝试。
  • 你试过在调试器中单步调试吗?
  • @Mawg PHP 没有调试器。
  • 如果你不知道你在说什么,那么请不要发帖。我已经使用 NetBeans、CodeLobster 和 PHPstorm 调试了 PHP。是的,您可以调试 PHP,我建议您研究一下。它会让你成为一个更有效率的开发者。

标签: javascript php infinite-loop


【解决方案1】:

首先,你必须将检查语句从

if($_POST['LinkedIn'] == "yes")

if(isset($_POST['LinkedIn']))

第二件事,你必须删除你的JS代码中的关闭句close();

当您进行这两项更改时,选中的链接将打开。如果有一个未选中的框,则会打开一个带有链接http://localhost/functions/share.php 的窗口。为了解决这个问题,请在“JS”代码中声明链接。

你的最终代码:

<?php

    if(isset($_POST['summary'])){
        $linkedIn = "";
        $faceBook = "";
        $twitter = "";

        if(isset($_POST['LinkedIn']))
            $linkedIn = htmlspecialchars("http://www.linkedin.com/");
        else
            $linkedIn = "";

        if(isset($_POST['FaceBook']))
            $faceBook = htmlspecialchars("http://www.facebook.com/");
        else
            $faceBook = "";

        if(isset($_POST['Twitter']))
            $twitter = htmlspecialchars("http://www.twitter.com/");
        else
            $twitter = "";

    }

?>
<html>
<body>
    <script>

         var linkedin= "<?php echo $linkedIn; ?>";
         var faceBook= "<?php echo $faceBook; ?>";
         var twitter= "<?php echo $twitter; ?>";

         if(linkedin != "")
            window.open(linkedin);
         if(faceBook != "")
            window.open(faceBook);
         if(twitter != "")
            window.open(twitter);
         //close();

    </script>
</body>
</html>

【讨论】:

  • 我可以知道为什么要在最后删除 close() 吗?没有它,接收页面 share.php 将不会关闭。我会测试你的答案,如果可行,我会接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多