ChatGPT解决这个技术问题 Extra ChatGPT

停止表单提交的 JavaScript 代码

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

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

function returnToPreviousPage() {
    window.history.back();
}

我正在使用 JavaScript 和 Dojo Toolkit

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

RU 确定这个函数正在调用??尝试输入警报('test');在 window.history 之前
是的,我敢肯定;它被称为。

H
Hemant Metalia

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

<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 以使其正常工作。

感谢山姆分享信息。

编辑 :

感谢 Vikram 为 validateMyForm() 返回 false 的解决方法:

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

其中 validateMyForm() 是一个在验证失败时返回 false 的函数。关键是使用name事件。我们不能用于 egepreventDefault()


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

使用阻止默认值

道场工具包

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

jQuery

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

香草 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();
    });
}

出于很多原因,我会推荐 event.preventDefault() 而不是 return false,这应该是最佳答案:blog.nmsdvid.com/…
好答案。比选择的那个好。
很好,但是您将在哪里执行 OP 想要的验证?
@acidjazz 但是在防止默认后如何访问表单数据?
@Sahand @codeat30 您可以访问事件 target
P
Peter Mortensen

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

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

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


L
Linh

基于@Vikram Pudi 的回答,我们也可以用纯 Javascript 来做这样的事情

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

<script type="text/javascript">

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


    }
</script>

P
Peter Mortensen

只需使用一个简单的 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);


我喜欢这种方法,因为它允许我的用例,回调。
这可以防止使用回车键来提交表单。此外,新的 HTML5 属性(例如 required)也不起作用。
D
Danial

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

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

这个确切的答案(好吧,不准确,因为你的答案缺少分号)是在 8 个月前提交的,并且有充分的理由投反对票。这在大多数情况下都有效。但并非一直都在所有浏览器上。
我没有说你需要分号;我指出,这就是您的答案与更老的答案之间的所有不同之处。您现在要求我指出哪些浏览器不支持它(我从未说过有,我只是指出它并不总是有效),这证明您还没有阅读整个页面.
我通常不检查否决票,但我不知道人们否决了正确的代码。从技术上讲,分号是多余的,所以它是错误的。你说“你的缺少分号”暗示它是需要的,这是错误的。你说它“不会总是有效”,但你不能指出它不能工作的单个案例或浏览器?这是合理的逻辑?这是正确的代码。因此,除非您能指出它不起作用的情况,否则您根本没有任何意义。
这怎么没有更多的赞成票?与其他示例相比,它要简洁得多。
可能是因为标题与这个人实际要求的不符。
D
Doug

你所有的答案都提供了一些可以使用的东西。

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

<!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>

也为我工作。
I
Isaac Abramowitz

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

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

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

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

  // if invalid
  if (e.preventDefault) {
    e.preventDefault();
  } else {
    e.returnValue = false;
  }
}

您能解释一下为什么不使用 onsubmit 吗?
也许这只是偏好,但我发现如果所有事件侦听器都使用 JS 而不是使用属性的 HTML 附加,则更容易理解网页的功能。这样你在阅读别人的代码时就不需要来回跳了
如果有人在其中一个输入上按下回车而不是单击按钮怎么办?一般来说,我仍然提交......
M
Mauricio Gracia Gutierrez

假设您有一个类似于此的表格

<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(edge)、Safari 等。

如果不是这样,请告诉我


preventDefault()returnToPreviousPage() 的组合完美而优雅。它会中断正常操作,就像您设计任何异常捕获器一样工作。 +1。
D
Dheeraj Nalawade

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


M
Matee Gojra

干脆做吧......

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

这里是你的 JQuery

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

你在这里用过jquery吗?
J
Jesperai

Hemant 和 Vikram 的答案在 Chrome 中并不完全适合我。 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 让我走上正轨。


也为我工作。谢谢。
V
Viacheslav Panev

禁用提交按钮也有助于防止表单提交。

<input style="display:none" type="submit" disabled>


天才回答在这里!
B
Brandon Wegner

尽管看起来很明显,但应该注意的是,如果您使用阻止默认值阻止提交,如果验证顺利进行,您还必须提交您的表单。我在下面提供了一个完整的示例来验证文档类型,然后提交是否正确的文档类型。

<h2>Document Upload</h2>
<script>
var CanContinue = false;

function validateMyForm()
{
if(CanContinue == false)
  { 
    alert("You must upload a PDF, PNG, or JPG of your document.");


return false;

  }
  document.getElementById("myForm").submit();

  return true;
}

function getFileNameWithExt(event) {

  if (!event || !event.target || !event.target.files || event.target.files.length === 0) {
return;
  }

  const name = event.target.files[0].name;
  const lastDot = name.lastIndexOf('.');

  const fileName = name.substring(0, lastDot);
  const ext = (name.substring(lastDot + 1)).toUpperCase();
    if (ext =="JPG") {
    extension.value = "image/jpeg";
    CanContinue = true;

} else if (ext =="JPEG") {
  extension.value = "image/jpeg";
  CanContinue = true;

} else if (ext =="PNG") {
  extension.value = "image/png";
  CanContinue = true;

} else if (ext =="PDF") {
  extension.value = "application/pdf";
  CanContinue = true;

} else {
  alert("You must upload a PDF, PNG, or JPG of your document.");
  CanContinue = false;
}

  outputfile.value = fileName;


}

</script>


                <form method="post" id="myForm" action="/wheregoing" enctype="multipart/form-data" onsubmit="event.preventDefault(); validateMyForm();">
                
                Please upload a JPG, PNG, or PDF of the front of the document.
                <input id='inputfile' type="file" name="dafile" onChange='getFileNameWithExt(event)' required>
               
             <input id='extension' type='hidden' name='ContentType' value="">
                <input type="submit">
                </form>