用于停止表单提交的JavaScript代码

时间:2011-12-29 05:56:08

标签: javascript html forms

停止表单提交的一种方法是从JavaScript函数返回false。

单击提交按钮时,将调用验证功能。我有一个表格验证案例。如果满足该条件,我会调用名为 returnToPreviousPage();

的函数
function returnToPreviousPage() {
    window.history.back();
}

我正在使用JavaScript和Dojo Toolkit

而是返回上一页,它提交表单。如何中止此提交并返回上一页?

12 个答案:

答案 0 :(得分:236)

您可以使用函数的返回值来阻止表单提交

<form name="myForm" onsubmit="return validateMyForm();"> 

和功能类似

<script type="text/javascript">
function validateMyForm()
{
  if(check if your conditions are not satisfying)
  { 
    alert("validation failed false");
    returnToPreviousPage();
    return false;
  }

  alert("validations passed");
  return true;
}
</script>

如果Chrome 27.0.1453.116 m(如果上述代码无法使用),请set the event handler's parameter's returnValue字段为false以使其生效。

感谢Sam分享信息。

编辑:

感谢Vikram的解决方法,如果validateMyForm()返回false:

 <form onsubmit="event.preventDefault(); validateMyForm();">

其中validateMyForm()是一个函数,如果验证失败则返回false。关键是使用名称事件。我们不能用于例如e.preventDefault()

答案 1 :(得分:104)

使用防止默认

Dojo Toolkit

dojo.connect(form, "onsubmit", function(evt) {
    evt.preventDefault();
    window.history.back();
});

<强>的jQuery

$('#form').submit(function (evt) {
    evt.preventDefault();
    window.history.back();
});

Vanilla JavaScript

if (element.addEventListener) {
    element.addEventListener("submit", function(evt) {
        evt.preventDefault();
        window.history.back();
    }, true);
}
else {
    element.attachEvent('onsubmit', function(evt){
        evt.preventDefault();
        window.history.back();
    });
}

答案 2 :(得分:38)

以下作品截至目前(在Chrome和Firefox中测试):

<form onsubmit="event.preventDefault(); validateMyForm();">

其中validateMyForm()是一个在验证失败时返回false的函数。关键是使用名称event。我们不能用于例如e.preventDefault()

答案 3 :(得分:12)

只需使用简单的button代替提交按钮即可。并调用JavaScript函数来处理表单提交:

<input type="button" name="submit" value="submit" onclick="submit_form();"/>

script标记内的功能:

function submit_form() {
    if (conditions) {
        document.forms['myform'].submit();
    }
    else {
        returnToPreviousPage();
    }
}

您还可以尝试window.history.forward(-1);

答案 4 :(得分:4)

你的所有答案都有所帮助。

最后,这对我有用:(如果你不选择至少一个复选框项,它会发出警告并停留在同一页面中)

<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>
        <form name="helloForm" action="HelloWorld" method="GET"  onsubmit="valthisform();">
            <br>
            <br><b> MY LIKES </b>
            <br>
            First Name: <input type="text" name="first_name" required>
            <br />
            Last Name: <input type="text" name="last_name"  required />
            <br>
            <input type="radio" name="modifyValues" value="uppercase" required="required">Convert to uppercase <br>
            <input type="radio" name="modifyValues" value="lowercase" required="required">Convert to lowercase <br>
            <input type="radio" name="modifyValues" value="asis"      required="required" checked="checked">Do not convert <br>
            <br>
            <input type="checkbox" name="c1" value="maths"     /> Maths
            <input type="checkbox" name="c1" value="physics"   /> Physics
            <input type="checkbox" name="c1" value="chemistry" /> Chemistry
            <br>

            <button onclick="submit">Submit</button>

            <!-- input type="submit" value="submit" / -->
            <script>
                <!---
                function valthisform() {
                    var checkboxs=document.getElementsByName("c1");
                    var okay=false;
                    for(var i=0,l=checkboxs.length;i<l;i++) {
                        if(checkboxs[i].checked) {
                            okay=true;
                            break;
                        }
                    }
                    if (!okay) { 
                        alert("Please check a checkbox");
                        event.preventDefault();
                    } else {
                    }
                }
                -->
            </script>
        </form>
    </body>
</html>

答案 5 :(得分:4)

做一件容易的事情有很多困难的方法:

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

答案 6 :(得分:2)

我建议不要使用def index @months = Month.joins(runs: :user).where(users: {id: current_user}).distinct @month = Month.new end ,而是在脚本中附加一个事件。

onsubmit

然后使用var submit = document.getElementById("submitButtonId"); if (submit.addEventListener) { submit.addEventListener("click", returnToPreviousPage); } else { submit.attachEvent("onclick", returnToPreviousPage); } (或preventDefault()用于较旧的浏览器。)

returnValue = false

答案 7 :(得分:1)

Hemant和Vikram的答案对我来说并不适合我。 event.preventDefault();无论是否通过验证,脚本都阻止了页面的提交。相反,我不得不移动event.preventDefault();进入if语句如下:

    if(check if your conditions are not satisfying) 
    { 
    event.preventDefault();
    alert("validation failed false");
    returnToPreviousPage();
    return false;
    }
    alert("validations passed");
    return true;
    }

感谢Hemant和Vikram让我走上正轨。

答案 8 :(得分:1)

基于@Vikram Pudi的答案,我们也可以使用纯Javascript来做到这一点

<form onsubmit="submitForm(event)">
    <input type="text">
    <input type="submit">
</form>

<script type="text/javascript">

    function submitForm(event){
        event.preventDefault();


    }
</script>

答案 9 :(得分:0)

假设您有类似于此的表单

<form action="membersDeleteAllData.html" method="post">
    <button type="submit" id="btnLoad" onclick="confirmAction(event);">ERASE ALL DATA</button>
</form>

这是confirmAction函数的javascript

<script type="text/javascript">
    function confirmAction(e)
    {
        var confirmation = confirm("Are you sure about this ?") ;

        if (!confirmation)
        {
            e.preventDefault() ;
            returnToPreviousPage();
        }

        return confirmation ;
    }
</script>

这适用于Firefox,Chrome,Internet Explorer(边缘),Safari等。

如果不是这样,请告诉我

答案 10 :(得分:0)

例如,如果您在表单上有提交按钮,为了停止其传播,只需编写event.preventDefault();在单击提交按钮或输入按钮时调用的函数中。

答案 11 :(得分:0)

简单地做......

<form>
<!-- Your Input Elements -->
</form>

这里是你的JQuery

$(document).on('submit', 'form', function(e){
    e.preventDefault();
    //your code goes here
    //100% works
});