如何在javascript中收听表单提交事件?

IT技术 javascript forms validation
2021-01-15 05:58:43

我想编写我自己的表单验证 javascript 库,我一直在 google 上寻找如何检测提交按钮是否被点击,但我发现的只是你必须onSubmit="function()"在 html 中使用 onClick on 的代码

我想制作这个 javascript,这样我就不必接触任何 html 代码,比如添加 onSubmit 或 onClick javascript。

4个回答

为什么人们总是在不需要的时候使用 jQuery?
为什么人们不能只使用简单的 JavaScript?

var ele = /*Your Form Element*/;
if(ele.addEventListener){
    ele.addEventListener("submit", callback, false);  //Modern browsers
}else if(ele.attachEvent){
    ele.attachEvent('onsubmit', callback);            //Old IE
}

callback 是您要在提交表单时调用的函数。

关于EventTarget.addEventListener,请查看MDN 上的此文档

要取消本机submit事件(防止提交表单),请.preventDefault()在您的回调函数中使用,

document.querySelector("#myForm").addEventListener("submit", function(e){
    if(!isValid){
        e.preventDefault();    //stop form from submitting
    }
});

submit用图书馆收听事件

如果出于某种原因您决定需要一个库(您已经在使用一个库或者您不想处理跨浏览器问题),以下是在公共库中侦听提交事件的方法列表:

  1. jQuery

    $(ele).submit(callback);
    

    ele表单元素引用在哪里,callback回调函数引用。参考

  1. AngularJS (1.x)

    <form ng-submit="callback()">
    
    $scope.callback = function(){ /*...*/ };
    

    非常简单,控制器$scope内部框架提供的范围在哪里参考

  2. react

    <form onSubmit={this.handleSubmit}>
    
    class YourComponent extends Component {
        // stuff
    
        handleSubmit(event) {
            // do whatever you need here
    
            // if you need to stop the submit event and 
            // perform/dispatch your own actions
            event.preventDefault();
        }
    
        // more stuff
    }
    

    只需将处理程序传递给onSubmitprops。参考

  3. 其他框架/库

    请参阅您的框架的文档。


验证

您始终可以使用 JavaScript 进行验证,但使用 HTML5 我们也可以进行本机验证。

<!-- Must be a 5 digit number -->
<input type="number" required pattern="\d{5}">

您甚至不需要任何 JavaScript!每当不支持本机验证时,您可以回退到 JavaScript 验证器。

演示:http : //jsfiddle.net/DerekL/L23wmo1L/

我没有太多反对 jQuery,只有那些将它用作一种魔法咒语而没有意识到他们可以用几行代码替换整个事物的人。为什么不花时间了解浏览器的实际工作原理呢?这真的没有那么难。
2021-03-13 05:58:43
我个人认为,一个人应该首先了解基础知识。
2021-03-15 05:58:43
这 5 行“可怕……丑陋”的代码取代了 4,000 行 jQuery 提供的所需功能,而 jQuery 也必须是“可怕……丑陋”的代码。
2021-03-16 05:58:43
本着同样的精神,我们真的应该尝试编写更多的汇编语言。半开玩笑(我更喜欢 jquery 解决方案,如果你真的想了解幕后发生的事情,我认为这是一个无休止的兔子洞),但是是的,我很高兴我确实知道一些汇编语言,并且知道 TCP建立联系等等。我仍然不会仅仅为了教他们什么是引擎盖下的奇迹而向任何人提供较低级别的解决方案。
2021-04-06 05:58:43
@Ben - 并且仅仅因为您可以使用库做某事并不意味着您也应该这样做,也不应该通过“仅使用库 x”的回复来劝阻其他人学习基础知识。当有人问一个关于 javascript 的特定问题时,使用普通的 javascript 回答这个问题是有礼貌的。一定要从你选择的图书馆中推荐一些东西,但回答这个问题应该是第一要务。
2021-04-10 05:58:43

这是您可以在onSubmit发生时调用自己的 javascript 函数的最简单方法

HTML

<form>
    <input type="text" name="name">
    <input type="submit" name="submit">
</form>

JavaScript

window.onload = function() {
    var form = document.querySelector("form");
    form.onsubmit = submitted.bind(form);
}

function submitted(event) {
    event.preventDefault();
}
bind 确实是没有必要的。
2021-03-12 05:58:43
你为什么决定绑定'submitted'函数?函数中没有使用“this”。
2021-03-16 05:58:43

根据您的要求,您还可以在不使用 jQuery 等库的情况下执行以下操作:

将此添加到您的脑海中:

window.onload = function () {
    document.getElementById("frmSubmit").onsubmit = function onSubmit(form) {
        var isValid = true;
        //validate your elems here
        isValid = false;

        if (!isValid) {
            alert("Please check your fields!");
            return false;
        }
        else {
            //you are good to go
            return true;
        }
    }
}

您的表单可能仍然如下所示:

    <form id="frmSubmit" action="/Submit">
        <input type="submit" value="Submit" />
    </form>
总是使用addEventListener而不是 onsubmit 或 onload 来允许其他开发人员添加他们自己的侦听器。
2021-03-18 05:58:43

使用 jQuery:

$('form').submit(function () {
    // Validate here

    if (pass)
        return true;
    else
        return false;
});