【问题标题】:Submit form confirmation text present at the begining提交表单确认文本出现在开头
【发布时间】:2016-02-21 12:14:01
【问题描述】:

我的“您的消息已提交!”有问题用户单击表单上的提交按钮后的文本。问题是即使没有点击任何内容,该文本也会出现在开头,所以当您进入我的页面时,该文本已经存在......这里有什么问题?

表格:

<form role="form" id="contactForm">
     <div class="row">
            <div class="form-group">
                 <input type="text" class="form-control" name="name" id="name" placeholder="Wpisz swoje imię, nazwisko" required="required">
            </div>
            <div class="form-group">
                <input type="email" class="form-control" name="email" id="email" placeholder="Enter email" required>
            </div>

        <div class="form-group">
            <textarea id="message" name="message" class="form-control" rows="5" placeholder="Enter your message" required></textarea>
        </div>
        <button type="submit" id="form-submit" class="btn-block">Wyślij wiadomość</button>
 <div id="msgSubmit" class="h3 text-center hidden">Your message has been submitted!</div>
     </div>
    </form>

JS:

<script>
$(document).ready(function() {
    $("#contactForm").on("submit", function(event) {
        if (event.isDefaultPrevented()) {
        } else {
            event.preventDefault();
            submitForm();
        }
    });

    $("#msgSubmit").removeClass("hidden");
});

function submitForm() {
    $.ajax({
        type: "POST",
        url: "mail.php",
        data: $("#contactForm").serialize(),
        success: function(text) {
             if (text == "success"){
                formSuccess();
            }
        },
        error : function() {
        }
    });
}

$(document).ready(function formSuccess() {
    $("#msgSubmit" ).removeClass( "hidden" );
});

</script>

PHP:

<?php
$name = $_POST["name"];
$email = $_POST["email"];
$message = $_POST["message"];

$EmailTo = "unknown@unknwon.com.pl";
$Subject = $name;

$message .= "\n\n" . 'From: '. $email;
$success = mail($EmailTo, $Subject, $message);

// redirect to success page
if ($success){
   echo "success";
}else{
    echo "invalid";
}
?>

【问题讨论】:

  • 您正在删除 onReady 中的“隐藏”类。你做了两次。为什么?
  • 那我应该改变什么,你提出一个答案吗?
  • 如我的回答中所述,您需要在提交表单时显示消息,并在通话结束时再次隐藏。
  • 实际上...因为您说表单已提交。可能该消息应仅在成功时显示。这取决于ajax调用需要多少时间。如果速度快,最后写消息就够了。

标签: javascript php jquery html


【解决方案1】:

我有:

  1. 在提交事件中移动了移除类。

  2. 最后删除了“就绪”处理程序,因为我认为没有必要。

  3. 在 ajax 调用结束时添加了一个 add 类

脚本(第一个选项):

<script>
$(document).ready(function() {
    $("#contactForm").on("submit", function(event) {
        if (event.isDefaultPrevented()) {
        } else {
            event.preventDefault();
            $("#msgSubmit").removeClass("hidden");
            submitForm();
        }
    });

});

function submitForm() {
    $.ajax({
        type: "POST",
        url: "mail.php",
        data: $("#contactForm").serialize(),
        success: function(text) {
            $("#msgSubmit" ).addClass( "hidden" );
        },
        error : function() {
                $("#msgSubmit" ).addClass( "hidden" );
        }
    });
}

</script>

第二个选项(如果成功则只在最后发送消息):

<script>
$(document).ready(function() {
    $("#contactForm").on("submit", function(event) {
        if (event.isDefaultPrevented()) {
        } else {
            event.preventDefault();
            submitForm();
        }
    });

});

function submitForm() {
    $.ajax({
        type: "POST",
        url: "mail.php",
        data: $("#contactForm").serialize(),
        success: function(text) {
            if (text == "success") {
                $("#msgSubmit" ).removeClass( "hidden" );
                setTimeout(function() {
                    $("#msgSubmit" ).addClass( "hidden");    
                }, 3000);
            }
        },
        error : function() {
            /* You probably want to add an error message as well */
            $("#msgError" ).removeClass( "hidden" );
        }
    });
}

</script>

【讨论】:

  • 我选择了第二个选项 - 但是如何让消息消散器让我们说 4 秒后重置所有字段?
  • 如果可以请支持以上
  • 在超时的函数中,加回隐藏类
  • 你能更新你关于这个函数的第二种方法然后我会标记为答案
  • Marco,你真是个天才 :) 谢谢 - 如果不介意,还有最后一个问题 - 因为我的客户有时来自波兰,所以当他们键入的某些特殊字母无法在电子邮件框中正确识别时 - 你知道怎么做阅读ę、ą、ż等文本? Outlook 中是否有任何选项,因为我使用的是英文或者我必须处理的脚本中的某个地方?
【解决方案2】:

您正在从document.ready 中的#msgSubmit 容器中删除类hidden。只有在表单提交成功后,您才应该启用此消息。

注释如下:

$(document).ready(function() {
    $("#contactForm").on("submit", function(event) {
        if (event.isDefaultPrevented()) {
        } else {
            event.preventDefault();
            submitForm();
        }
    });

    //$("#msgSubmit").removeClass("hidden"); // comment this line
});

【讨论】:

  • 有趣的事情,但我检查了你的解决方案并让其他人在这里发布,但当我进入我的页面时,我仍然在开头看到该消息......
  • 你可以为hidden的班级发布css吗?
  • 这是引导框架类 - Samir 忘了我已经实现了 Marco 的解决方案,而你的解决方案很有帮助 - 谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 2019-03-12
  • 1970-01-01
  • 2014-09-22
  • 2016-10-19
  • 2021-09-17
相关资源
最近更新 更多