我想编写自己的表单验证JavaScript库,但我在谷歌上搜索如何检测提交按钮是否被点击时找到的所有代码都必须在HTML中使用 onSubmit="function()"
这样的 onClick。
我希望使这个JavaScript库不需要修改任何HTML代码,例如添加onSubmit或onClick JavaScript代码。
我想编写自己的表单验证JavaScript库,但我在谷歌上搜索如何检测提交按钮是否被点击时找到的所有代码都必须在HTML中使用 onSubmit="function()"
这样的 onClick。
我希望使这个JavaScript库不需要修改任何HTML代码,例如添加onSubmit或onClick JavaScript代码。
为什么人们在不必要的情况下总是使用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
事件如果出于某种原因你决定需要使用一个库(比如你已经在使用一个库或者不想处理跨浏览器的问题),这里提供了一些常用库中监听submit
事件的方法:
jQuery
$(ele).submit(callback);
Where ele
is the form element reference, and callback
being the callback function reference. Reference
<iframe width="100%" height="100%" src="http://jsfiddle.net/DerekL/wnbo1hq0/show" frameborder="0"></iframe>
AngularJS (1.x)
<form ng-submit="callback()">
$scope.callback = function(){ /*...*/ };
Very straightforward, where $scope
is the scope provided by the framework inside your controller. Reference
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
}
Simply pass in a handler to the onSubmit
prop. Reference
Other frameworks/libraries
Refer to the documentation of your framework.
您可以使用JavaScript进行验证,但是HTML5也提供了本地验证功能。
<!-- Must be a 5 digit number -->
<input type="number" required pattern="\d{5}">
无需使用JavaScript!每当原生验证不受支持时,您可以退回到JavaScript验证器。
这是您可以拥有自己的javascript函数在onSubmit
发生时被调用的最简单的方法。
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();
}
根据您的要求,您也可以在不使用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
,以便其他开发人员可以添加自己的侦听器。 - kuzey beytarjQuery代码:
$('form').submit(function (event) {
targetObj = event.target;
// do your logic
});
纯JavaScript技巧
只需在onload事件中执行以下操作即可:
for(var i=0; i<document.forms.length; i++){
var form = document.forms[i];
form.addEventListener("submit", myListener,false);
}
致谢:本文涉及多重表单提交事件监听器处理的JavaScript翻译得益于StackOverflow社区上Jan Pfeifer的回答
希望这能帮助到某些人
使用 jQuery:
$('form').submit(function () {
// Validate here
if (pass)
return true;
else
return false;
});
document.forms['yourForm'].onsubmit = function(){}
?或者addEventListener
? - Joseph Silber... using ( document.forms )
。 - Harsh Patel