提交时停止表单刷新页面

IT技术 javascript jquery html forms
2021-01-10 04:43:28

在字段中没有任何数据的情况下按下发送按钮时,我将如何防止页面刷新?

验证设置工作正常,所有字段都变为红色,但页面会立即刷新。我对JS的了解比较基础。

特别是我认为processForm()底部功能是“坏的”。

HTML

<form id="prospects_form" method="post">
    <input id="form_name" tabindex="1" class="boxsize" type="text" name="name" placeholder="Full name*" maxlength="80" value="" />
    <input id="form_email" tabindex="2" class="boxsize" type="text" name="email" placeholder="Email*" maxlength="100" value="" />
    <input id="form_subject" class="boxsize" type="text" name="subject" placeholder="Subject*" maxlength="50" value="FORM: Row for OUBC" />
    <textarea id="form_message" class="boxsize" name="message" placeholder="Message*" tabindex="3" rows="6" cols="5" maxlength="500"></textarea>

    <button id="form_send" tabindex="5" class="btn" type="submit" onclick="return processForm()">Send</button>
    <div id="form_validation">
        <span class="form_captcha_code"></span>
        <input id="form_captcha" class="boxsize" type="text" name="form_captcha" placeholder="Enter code" tabindex="4" value="" />
    </div>
    <div class="clearfix"></div>
</form>

JS

$(document).ready(function() { 

// Add active class to inputs
$("#prospects_form .boxsize").focus(function() { $(this).addClass("hasText"); });
$("#form_validation .boxsize").focus(function() { $(this).parent().addClass("hasText"); });
// Remove active class from inputs (if empty)
$("#prospects_form .boxsize").blur(function() { if ( this.value === "") { $(this).removeClass("hasText"); } });
$("#form_validation .boxsize").blur(function() { if ( this.value === "") { $(this).parent().removeClass("hasText"); } });



///////////////////
// START VALIDATION
$("#prospects_form").ready(function() {

    // DEFINE GLOBAL VARIABLES
    var valName = $('#form_name'),
        valEmail = $("#form_email"),
        valEmailFormat = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
        valMsg = $('#form_message'),
        valCaptcha = $('#form_captcha'),
        valCaptchaCode = $('.form_captcha_code');



    // Generate captcha
    function randomgen() {
        var rannumber = "";
        // Iterate through 1 to 9, 4 times
        for(ranNum=1; ranNum<=4; ranNum++){ rannumber+=Math.floor(Math.random()*10).toString(); }
        // Apply captcha to element
        valCaptchaCode.html(rannumber);
    }
    randomgen();


    // CAPTCHA VALIDATION
    valCaptcha.blur(function() {
        function formCaptcha() {
            if ( valCaptcha.val() == valCaptchaCode.html() ) {
                // Incorrect
                valCaptcha.parent().addClass("invalid");
                return false;
            } else {
                // Correct
                valCaptcha.parent().removeClass("invalid");
                return true;
            }
        }
        formCaptcha();
    });

    // Remove invalid class from captcha if typing
    valCaptcha.keypress(function() {
        valCaptcha.parent().removeClass("invalid");
    });


    // EMAIL VALIDATION (BLUR)
    valEmail.blur(function() {
        function formEmail() {
            if (!valEmailFormat.test(valEmail.val()) && valEmail.val() !== "" ) {
                // Incorrect
                valEmail.addClass("invalid");
            } else {
                // Correct
                valEmail.removeClass("invalid");
            }
        }
        formEmail();
    });

    // Remove invalid class from email if typing
    valEmail.keypress(function() {
        valEmail.removeClass("invalid");
    });


    // VALIDATION ON SUBMIT
    $('#prospects_form').submit(function() {
        console.log('user hit send button');

        // EMAIL VALIDATION (SUBMIT)
        function formEmailSubmit() {
            if (!valEmailFormat.test(valEmail.val())) {
                // Incorrect
                valEmail.addClass("invalid");
            } else {
                // Correct
                valEmail.removeClass("invalid");
            }
        }
        formEmailSubmit();

        // Validate captcha
        function formCaptchaSubmit() {
            if( valCaptcha.val() === valCaptchaCode.html() ) {
                // Captcha is correct
            } else {
                // Captcha is incorrect
                valCaptcha.parent().addClass("invalid");
                randomgen();
            }
        }
        formCaptchaSubmit();


        // If NAME field is empty
        function formNameSubmit() {
            if ( valName.val() === "" ) {
                // Name is empty
                valName.addClass("invalid");
            } else {
                valName.removeClass("invalid");
            }
        }
        formNameSubmit();


        // If MESSAGE field is empty
        function formMessageSubmit() {
            if ( valMsg.val() === "" ) {
                // Name is empty
                valMsg.addClass("invalid");
            } else {
                valMsg.removeClass("invalid");
            }
        }
        formMessageSubmit();


        // Submit form (if all good)
        function processForm() {
            if ( formEmailSubmit() && formCaptchaSubmit() && formNameSubmit() && formMessageSubmit() ) {
                $("#prospects_form").attr("action", "/clients/oubc/row-for-oubc-send.php");
                $("#form_send").attr("type", "submit");
                return true;
            } else if( !formEmailSubmit() ) {
                valEmail.addClass("invalid");
                return false;
            } else if ( !formCaptchaSubmit() ) {
                valCaptcha.parent().addClass("invalid");
                return false;
            } else if ( !formNameSubmit() ) {
                valName.addClass("invalid");
                    return false;
                } else if ( !formMessageSubmit() ) {
                    valMsg.addClass("invalid");
                    return false;
                } else {
                    return false;
                }
            }
        });
    });
    // END VALIDATION
    /////////////////
});
6个回答

您可以阻止表单提交

$("#prospects_form").submit(function(e) {
    e.preventDefault();
});

当然,在函数中,您可以检查空字段,如果有任何不正确的地方,e.preventDefault()将停止提交。

没有 jQuery:

var form = document.getElementById("myForm");
function handleForm(event) { event.preventDefault(); } 
form.addEventListener('submit', handleForm);
这个方法需要jQuery。我认为使用按钮类型属性来防止它总是更好的做法。
2021-03-21 04:43:28
这种方法可以在没有 jQuery 的情况下完成,例如: var form = document.getElementById("myForm"); function handleForm(event) { event.preventDefault(); } form.addEventListener('submit', handleForm); 而且我似乎不知道如何正确格式化注释。
2021-03-29 04:43:28
基本上,包括event.preventDefault();在您的表单提交处理代码中。我在另一条评论中的单行变体(基本上与 jQuery 版本相同)是:document.getElementById("prospects_form").addEventListener('submit', function(event){event.preventDefault();});可能有一种方法可以缩短它(通过不使用addEventListener(),但似乎这些做事方式通常不受欢迎之上。
2021-03-31 04:43:28

添加这个 onsubmit="return false" 代码:

<form name="formname" onsubmit="return false">

那为我修好了。它仍然会运行你指定的 onClick 函数

但它永远不会让表单提交。
2021-03-13 04:43:28
不需要库,jquery 非常棒,在这种情况下原生更好。
2021-03-24 04:43:28
这是没有 JQuery 的最干净的解决方案。此外,您还可以将其用作;onsubmit="return submitFoo()" 并在 submitFoo() 中返回 false 如果您需要在提交时调用函数。
2021-04-04 04:43:28
它仍然会运行 HTML5 浏览器的表单验证。
2021-04-09 04:43:28

将按钮类型替换为button

<button type="button">My Cool Button</button>
我认为如果您确定客户端将始终使用 JavaScript,这将起作用,否则不应排除提交类型的按钮
2021-03-13 04:43:28
这是建议的唯一方法,即使存在可用于测试和开发的 Javascript 错误,也可以防止页面刷新。
2021-03-29 04:43:28
@briancollins081 这不是全球解决方案。这个答案仅指 OP 的当前情况,如果没有 javascript,OP 将永远无法在任何地方提交表单,即使button type="submit"他使用 jQuery 提交了按钮操作表单。
2021-04-06 04:43:28
这很有用,但不会在用户按下 [Enter] 时阻止提交/重新加载。
2021-04-07 04:43:28
不利于表单验证:/您需要在表单元素中添加一个提交按钮
2021-04-07 04:43:28

使用表单提交时防止重新加载页面的一种好方法是添加return falseonsubmit 属性。

<form action="#" onsubmit="yourJsFunction();return false">
    <input type="text"/>
    <input type="submit"/>
</form>
但你不觉得返回 false 不优雅吗?
2021-03-29 04:43:28
这对我完全有用。这应该是可以接受的答案。action='#'
2021-04-03 04:43:28
超级老线程,但是对于现在遇到此问题的任何人,请不要尝试,action="#"因为它不起作用并且不是合适的解决方案。关键其实是onsubmit="yourJsFunction();return false"
2021-04-03 04:43:28

您可以使用此代码提交表单而无需刷新页面。我在我的项目中做到了这一点。

$(function () {
    $('#myFormName').on('submit',function (e) {

              $.ajax({
                type: 'post',
                url: 'myPageName.php',
                data: $('#myFormName').serialize(),
                success: function () {
                 alert("Email has been sent!");
                }
              });
          e.preventDefault();
        });
});
这个答案是唯一一个保持表单正常运行的答案。就我而言,这是唯一的解决方案,因为我是从第三方获取我的表格并且不能过多地使用它。
2021-04-09 04:43:28