繁体   English   中英

如何只运行一次javascript函数?

[英]How to run javascript function only once?

最近,我问了一个问题, 问题如何在没有提交按钮的情况下获取输入的数据值

答案对我来说非常有效,现在我进入了第二阶段,我想将javascript的变量保存到php的变量中,以便可以使用phpmail发送数据。

我了解没有直接的方法可以将javascript变量的值赋给php变量。

所以,我想出了以下代码:( jquery ver 3.4.1 min

index.php

    <form>
        <input type="text" name="nameValidation" id="nameValidation" placeholder="Name">
        <input type="number" name="phoneValidation" id="phoneValidation" placeholder="Phone">
        <input type="email" name="emailValidation" id="emailValidation" placeholder="Email">
    </form>

    <div id="display"></div>
    <script>
        $(function() {

            $('#nameValidation').on('input', function() {
                var nameValisession = $(this).val();
                sessionStorage.setItem("nameValiSession", nameValisession);
            }); 

            $('#phoneValidation').on('input', function() {
                var phoneValisession = $(this).val();
                sessionStorage.setItem("phoneValiSession", phoneValisession);
            }); 

            $('#emailValidation').on('input', function() {
                var emailValisession = $(this).val();
                sessionStorage.setItem("emailValiSession", emailValisession);
            }); 

        }); 

        window.onbeforeunload = function() {
            return "email will get sent!";
        }

    </script>

该页面没有错误,可以正常工作。 它收集有关keyup的数据并将其设置为会话存储。

index2.php

<body onload="myFunc()">
    <div id="display"></div>
    <div id="display2"></div>
    <div id="display3"></div>
    <script>
        var nameValisession = sessionStorage.getItem("nameValiSession");
        var phoneValisession = sessionStorage.getItem("phoneValiSession");
        var emailValisession = sessionStorage.getItem("emailValiSession");
        document.getElementById("display").innerHTML = nameValisession;
        document.getElementById("display2").innerHTML = phoneValisession;
        document.getElementById("display3").innerHTML = emailValisession;


        function myFunc(){
            myFunc = function(){}; 
            window.location.replace("index2.php?myName=" + nameValisession + "&myPhone=" + phoneValisession + "&myEmail=" + emailValisession); 
        };

    </script>

    <?php
        $myName = $_GET["myName"];
        $myPhone = $_GET["myPhone"];
        $myEmail = $_GET["myEmail"];

        echo "PHP RESULT: " . $myName . " - " . $myPhone . " - " . $myEmail;
    ?>

</body>

现在,这是我打算从index1.php所有数据的index1.php ,通过将值设置为URL参数并使用PHP来获取结果,将javascript的变量转换为php的变量。

这对我来说很有效,除了一部分,它还在不断地重新加载。 根据这里答案 ,它将先加载myFunc然后停止它,但是,在我的情况下,它是永久循环的,而没有停止该函数。

我该如何解决此问题,以使功能仅加载一次?

重新加载页面之前,请检查所需的数据是否已经在查询参数中-如果已存在,请不要重新加载。 检查现有参数之一是否存在,如果存在,则不重新加载;否则,添加一个布尔值参数(如needs_reload ,您可以在运行myFunc时将其设置为false,然后仅在needs_reloadtrue运行myFunc

为什么不使用sessionStorage并设置适当的标志?

if (sessionStorage.getItem('myFlag') != 'yes') {
    sessionStorage.setItem('myFlag', 'yes');
    // do your stuff 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM