繁体   English   中英

PHP阻止提交后刷新/加载页面

[英]PHP Prevent Page Refresh/Load after Submit

我正在尝试使用PHP验证表单中的字段,但是如果验证中存在错误,我需要类似于e.preventDefault()的方法来阻止刷新/加载页面。 我对JavaScript / jQuery不太熟悉,所以我希望使用PHP处理所有POST数据(如果可能)。 我试图在Submit上运行checkForm()函数,但我意识到它始终返回true,因为它在发布数据之前运行。 我还考虑过创建一个JS函数来调用e.preventDefault(),但是我认为我唯一的选择是(#form).submit()函数,我想避免不得不在JS / jQuery中检索和发布数据,因为有些元素是DOM元素,我不确定如何在JS / jQuery中访问它们。

为了让您了解我正在使用的DOM元素,下面是一个jsfiddle,它可以动态创建行:

https://jsfiddle.net/hnj6ed1y/52/

可能有多行,并且这些字段具有相似的名称(即:textfield1,textfield2等)。

有任何想法吗? 预先感谢您的所有帮助!

    <?php

    // setting initial variables here

    ?>

    <script>

    var isDateTimeValid = true;

    function checkDates(val) {

        if (val == false) {
            isDateTimeValid = false;
        }
        else {
            isDateTimeValid = true;
        }
    }


    function checkForm () {

        if (isDateTimeValid == true) {
            return true;
        }
        else {
            alert("Please check date/times");
            return false;
        }
    }
    </script>

    <?php

    if(isset($_POST['next'])){

        // Validating POST data here

        $dateValid = convertOORDateTime($date1, $time1, $date2, $time2);

        if ($dateValid < 1) {
            echo "<script> checkDates(false); </script>";
            $errors[] = 'Please make sure your dates are correct';
        }
        else {
            echo "<script> checkDates(true); </script>";
        }

    }

    $err_msg = '';

    if(!empty($errors)){

        // want to stop page refresh/load here

        $err_msg = '<p class="error">'.implode('<br />', $errors).'</p>';   
    }

    ?>

    <!DOCTYPE html>
    <form name="form1" id="form1" method="post" action="<?php print $thispage;?>" onsubmit="return checkForm()">

        <?php echo $err_msg; ?>

    </form>

当您的checkForm无法阻止表单提交时,这很奇怪。 您的JS代码可能会抛出错误,然后代码继续运行。

简单的方法是将“提交”按钮更改为“普通”按钮。 当您单击普通按钮时,表单不会自动提交。 验证成功后,您可以通过jquery手动提交表单。

$('#button-id').click(function(){
    var valid = true;
    // perform the validation here, for example
    if($('something').val() == "") {
        valid = false;
        // notice user the error
    }
    // Continue to validate

    // Finally, check the valid
    if(valid) {
        ('#form-id').submit();
    }
});

在验证部分,您可能会使用jQuery验证,然后可以按照以下步骤进行操作

var form = $( "#myform" );
form.validate();
$( "button" ).click(function() {
   if(form.valid()) {
       form.submit();
   }
});

您应该将验证检查客户端/服务器分开放置。 在提交之前使用JS,在提交之后使用PHP。 不要将两者交织在一起。 当您通过php调用JS时,服务器必须向浏览器(客户端)发送响应以进行任何操作,从而重新加载页面。

示例: echo "<script> checkDates(false); </script>"; Echo()将输出发送到浏览器(客户端)。 在这种情况下需要JS来运行一个函数。

在提交之前,使用on。(Blur)实时进行简单验证。 提交后,即可使用PHP服务器端验证。 永远不要依赖客户。 可以通过浏览器关闭,编辑JS。

<form>
  <input tabindex="1" id="field1" type="text" name="field1" value="value 1" required />
  <input tabindex="2" id="field2" type="text" name="field2" value="value 2" required />
  <input tabindex="3" type="text" name="field3" value="value 3" />
  <input tabindex="4" type="submit" name="submit" value="Submit" />
</form>

<script>
/* Simplistic validation */
jQuery(document).ready(function($){
  jQuery(document).on("blur", "#field1", function(){
    // validate this field

  });

  jQuery(document).on("blur", "#field2", function(){
    // validate this field

  });

});
</script>

暂无
暂无

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

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