javascript - 使用 btn 对表单进行 HTML5 验证,触发 JS 函数发送 php 邮件并在成功时显示模式

标签 javascript php html ajax

我的网站上有表单,当我单击按钮时,我会触发一个 JS 函数,该函数从我的表单中获取输入并使用 php 发送邮件。邮件发送后,模式会显示感谢联系。一切都很完美,直到我尝试使用“需要 HTML5”来验证表单。如果我使用提交表单,验证有效,但我的模式无效。这让我发疯,这一定是我错过的一些简单的解决方案。我进行了很多搜索,但没有找到适合我的问题的解决方案。

BR 垫子

我的 HTML

    <input type="text" name="name" id="name" required placeholder="Ditt namn:"><br>                  
    <input type="email" name="mail" id="mail" required placeholder="Din e-post:"><br>
    <input type="tel" name="phone" id="phone" required placeholder="Ditt telefonnummer:"><br>                   
    <textarea name="message" id="message" required placeholder="Ditt meddelande:" rows="10"></textarea>                 
    <table>
    <td><input type="checkbox" name="checkbox" id="checkbox" value="checkbox" required ></td><td>
    <label for="checkbox">&nbsp;&nbsp;Jag har läst och godkänner news <a onclick="showModal('intrigitetspolicyModal')">integritetspolicy</a></label>
   </td> <br>
    </table>
    <input id="buttonMail" type='button'  onclick=”sendMail()” value='Skicka'/>               
    </form>

我的JS

  function sendMail(){

    var data = {
        name: $("#name").val(),
        mail: $("#mail").val(),
        phone: $("#phone").val(),
        message: $("#message").val()
    };
    $.ajax({
        type: "POST",
        url: "javaScript/mail.php",
        data: data,

        success: function(){
        }

    });

    showModal('kontaktModal');
    $("#formMail").trigger('reset');
    return false;

}

function showModal(Modal){
    var modal = document.getElementById(Modal);
    modal.style.display = "block";
}

我的 PHP

<?php

如果($_POST){

$to = "example@example";
$subject = "Medelande från example";
$subject2 = "Kopia på det formulär du skicka på example";
$name = $_POST['name'];
$from = $_POST['mail'];
$phone = $_POST['phone'];
$message = $name .  " skrev:" . "\n\n" . $_POST['message'] . "\n\n"  . $_POST['name'] . "\n" . $_POST['mail'] . "\n" . $_POST['phone'];
$message2 = "Här är en kopia på ditt meddelande " . $first_name . "\n\n" . $_POST['message'];

$headers = "From:" . $from;
$headers2 = "From:" . $to;

mail($to,$subject,$message,$headers); //send email
mail($from,$subject2,$message2,$headers2); // sends a copy of the message to the sender

} ?>

最佳答案

基本上,您只需在 sendMail() 函数上调用 reportValidity() 即可受益于 HTML5 验证,而无需实际触发表单提交。

这样的东西应该适合你:

function sendMail(){
    var isValid = document.querySelector('from').reportValidity();
    if (!isValid) {
        return false;
    }

    var data = {
        name: $("#name").val(),
        mail: $("#mail").val(),
        phone: $("#phone").val(),
        message: $("#message").val()
    };
    $.ajax({
        type: "POST",
        url: "javaScript/mail.php",
        data: data,

        success: function(){
        }

    });

    showModal('kontaktModal');
    $("#formMail").trigger('reset');
    return false;
}

在此处查看更多信息/示例:https://googlechrome.github.io/samples/report-validity/

关于javascript - 使用 btn 对表单进行 HTML5 验证,触发 JS 函数发送 php 邮件并在成功时显示模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58920757/

相关文章:

javascript - 与使用 WebSockets 发送大量消息相比,发送大量消息的开销大吗?

javascript - Safari 上的 Font-Awesome onclick 问题,适用于 Chrome 和 Firefox

javascript - 在 foreach 列表之后运行脚本

javascript - 如何从总数中启动复选框组值

php - 如何使用android设备将数据插入mysql?

Java - 转义 HTML 字符(不包括某些字符)

javascript - Janrain 自定义按钮

javascript - 如何在处理节点时设置ag-Grid中的单元格样式?

php - 从多个复选框更新数据时出现困惑

php - 数据库存储与 Cookies - 存储表单数据