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

Muh*_*riq 187 html javascript forms

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

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

function returnToPreviousPage() {
    window.history.back();
}
Run Code Online (Sandbox Code Playgroud)

我正在使用JavaScript和Dojo Toolkit.

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

Hem*_*lia 261

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

<form name="myForm" onsubmit="return validateMyForm();"> 
Run Code Online (Sandbox Code Playgroud)

和功能一样

<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>
Run Code Online (Sandbox Code Playgroud)

如果Chrome 27.0.1453.116 m(如果上述代码不起作用),请将事件处理程序的参数的returnValue字段设置为false以使其生效.

感谢Sam分享信息.

编辑:

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

 <form onsubmit="event.preventDefault(); validateMyForm();">
Run Code Online (Sandbox Code Playgroud)

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

  • 任何返回"false"的东西似乎都没有任何效果; Chrome仍会提交表单.例如,`onsubmit ="return false;"`.但是,将事件处理程序的参数的`returnValue`字段设置为`false`对我有用. (4认同)
  • 您好Sam/Hemant,您可以提供代码示例,了解如何将事件处理程序的参数的returnValue字段设置为false. (3认同)
  • 只是猜测:它在最新版本的 Chrome 中对我不起作用。 (2认同)
  • 我认为既然这是公认的答案,它可能应该告诉如何正确地做到这一点。我和 JackDev 一起想知道如何让它正常工作。按原样,这*不起作用* (2认同)
  • 如果 `validateMyForm()` 有错误,则不会到达 `return false`。所以这可能会失败。经过几个小时后,我找到了一个有效的解决方案并将其发布在下面。 (2认同)

Gre*_*ida 110

使用防止默认

Dojo Toolkit

dojo.connect(form, "onsubmit", function(evt) {
    evt.preventDefault();
    window.history.back();
});
Run Code Online (Sandbox Code Playgroud)

jQuery的

$('#form').submit(function (evt) {
    evt.preventDefault();
    window.history.back();
});
Run Code Online (Sandbox Code Playgroud)

香草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();
    });
}
Run Code Online (Sandbox Code Playgroud)

  • 好答案。比所选择的更好。 (3认同)
  • 由于很多原因,我建议event.preventDefault()重复false,这应该是最好的答案:http://blog.nmsdvid.com/when-to-use-return-false-and-when-preventdefault/ (2认同)
  • 很好,但是您将在哪里执行OP所需的验证? (2认同)

Vik*_*udi 45

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

<form onsubmit="event.preventDefault(); validateMyForm();">
Run Code Online (Sandbox Code Playgroud)

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


dku*_*mar 13

只需使用简单button而不是提交按钮.并调用JavaScript函数来处理表单提交:

<input type="button" name="submit" value="submit" onclick="submit_form();"/>
Run Code Online (Sandbox Code Playgroud)

script标签内的功能:

function submit_form() {
    if (conditions) {
        document.forms['myform'].submit();
    }
    else {
        returnToPreviousPage();
    }
}
Run Code Online (Sandbox Code Playgroud)

你也可以试试 window.history.forward(-1);

  • 这可以防止使用enter键提交表单.此外,新的HTML5属性,如"required"将无法正常工作. (10认同)

Pha*_*inh 11

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

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

<script type="text/javascript">

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


    }
</script>
Run Code Online (Sandbox Code Playgroud)


Dan*_*ial 9

做一件简单的事情有很多困难的方法:

<form name="foo" onsubmit="return false">
Run Code Online (Sandbox Code Playgroud)

  • 这个确切的答案(好吧,不准确,因为你的缺少一个分号)是在 8 个月前提交的,并且有充分的理由投反对票。这在_大多数_时候都有效。但并非所有浏览器都**所有**。 (4认同)
  • 我没有说你_需要_一个分号;我指出,这就是您的答案与 __ 多 __ 岁的答案之间的全部不同之处。你现在要求我指出哪些浏览器不支持它(我从来没有说过有,我只是指出它不会总是有效),这一事实证明你_仍然_没有阅读整页. (3认同)
  • 我通常不检查否决票,除非我不知道人们正在否决正确的代码。从技术上讲,分号是无关紧要的,所以是错误的。你说“你的缺少分号”暗示它是需要的,这是错误的。你说它“不会总是有效”,但你不能指出它不能工作的单个案例或浏览器?这是合理的逻辑吗?这是正确的代码。因此,除非您能指出它不起作用的情况,否则您根本没有任何意义。 (2认同)

Isa*_*itz 6

我建议不要使用onsubmit而是在脚本中附加一个事件。

var submit = document.getElementById("submitButtonId");
if (submit.addEventListener) {
  submit.addEventListener("click", returnToPreviousPage);
} else {
  submit.attachEvent("onclick", returnToPreviousPage);
}
Run Code Online (Sandbox Code Playgroud)

然后使用preventDefault()(或returnValue = false对于较旧的浏览器)。

function returnToPreviousPage (e) {
  e = e || window.event;
  // validation code

  // if invalid
  if (e.preventDefault) {
    e.preventDefault();
  } else {
    e.returnValue = false;
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 您能解释一下为什么不使用“onsubmit”吗? (2认同)

小智 5

您所有的答案都可以使用。

最终,这对我有用:(如果您不选择至少一个复选框,它会警告并停留在同一页面上)

<!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>
Run Code Online (Sandbox Code Playgroud)