当前位置: 首页 > 面试题库 >

JavaScript停止提交表单刷新页面

景俊拔
2023-03-14
问题内容

当按下发送按钮而字段中没有任何数据时,如何防止页面刷新?

验证设置工作正常,所有字段均变为红色,但随后页面立即刷新。我对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
    /////////////////
});

问题答案:

您可以阻止表单提交

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

当然,在该函数中,您可以检查是否有空白字段,如果看起来不正确,e.preventDefault()将停止提交。

没有jQuery:

var form = document.getElementById("myForm");
function handleForm(event) { event.preventDefault(); } 
form.addEventListener('submit', handleForm);


 类似资料:
  • 问题内容: 当按下发送按钮而字段中没有任何数据时,如何防止页面刷新? 验证设置工作正常,所有字段均变为红色,但随后页面立即刷新。我对JS的知识比较基础。 我特别认为底部的功能是“不良”。 的HTML JS 问题答案: 您可以阻止表单提交 当然,在该函数中,您可以检查是否有空白字段,如果看起来不正确,将停止提交。 没有jQuery:

  • 问题内容: 停止提交表单的一种方法是从JavaScript函数返回false。 单击提交按钮后,将调用验证功能。我有一个表单验证案例。如果满足该条件,则调用一个名为 returnToPreviousPage() 的函数 。 我正在使用JavaScript和Dojo Toolkit。 而不是返回上一页,它提交了表单。如何取消提交内容并返回上一页? 问题答案: 您可以使用函数的返回值来防止表单提交 和

  • 问题内容: 我想提交表单而不刷新页面,从我阅读的内容来看,它应该可以与Ajax一起使用,我在做什么错? 当我这样做时,一切都与php和其他东西一起工作: 但是我希望它提交而不刷新页面。 HTML的一部分: JavaScript的一部分: 提前致谢。 编辑:可能已修复它在提交但没有发送提交 问题答案: 解决了它只是替换了: 用这个代替

  • 问题内容: 有人可以告诉我使用 jquery来显示成功提交表单 而不刷新页面 的教程。传递邮件时,在gmail上会发生类似的事情,黄色的叠加层显示邮件已传递,然后淡出。 我希望根据表单提交的结果显示消息。 问题答案: 好的…类似这样的东西…但是我没有尝试过…所以像教程一样使用它。您也可以使用json js: HTML: form_process.php

  • 问题内容: 我的表单类似于以下内容: 我是AJAX的新手,我要完成的工作是当用户单击“提交”按钮时,我希望脚本在后台运行而不刷新页面。 我尝试了类似下面的代码的方法,但是,它似乎仍然像以前一样提交表单,而不像我所需要的那样(在幕后): 如果可能的话,我想获得使用AJAX实施此功能的帮助, 提前谢谢了 问题答案: 您需要阻止默认操作(实际提交)。

  • 问题内容: 我对这一切都很陌生。我正在使用ASP.NET MVC C#LINQ to SQL 。 我有一个编辑页面,可加载作者及其所有书籍。这些书是通过Ajax调用加载的。 这部分工作正常。该页面加载有Author信息,然后是Books加载(DIV id =“ Books”中的局部视图,仅包含Book Category和Book Title): 现在,在主视图页面上,我想要一个链接。单击链接后,我