javascript onsubmit在同一个调用中返回两个不同的值
验证功能javascript onsubmit在同一个调用中返回两个不同的值,javascript,html,validation,Javascript,Html,Validation,验证功能 function validateForm(){ var els; els = document.getElementById('name'); if(els.value == ''){ console.log(0); alert('Ai uitat sa completezi numele');
function validateForm(){
var els;
els = document.getElementById('name');
if(els.value == ''){
console.log(0);
alert('Ai uitat sa completezi numele');
return false;
}
els = document.getElementsByClassName('education');
[].forEach.call(els, function (el){
if(el.value == ''){
alert('Ai uitat unul sau mai multe campuri la educatie');
console.log(1);
return false;
}
});
console.log(2)
return false;
}
形式
<form onsubmit="return validateForm()" class="form-horizontal" action="{{ URL::to('/admin/people/') }}" method="POST" id="myForm">
我已经生成了动态html,所以除了服务器端验证之外,我还要进行javascript验证,这样当页面重新加载时,用户就不会丢失动态生成的html。
这里的问题是,如果我将第三个返回值更改为true,它将输出提交表单的1和2,这非常奇怪。。。
控制台中也没有显示错误
如果它进入第一个If,它在那里只输出0,所以我猜这是由循环引起的?这:
[].forEach.call(els, function (el){
if(el.value == ''){
alert('Ai uitat unul sau mai multe campuri la educatie');
console.log(1);
return false;
}
});
导致从与主函数不同的作用域返回。拦截提交时,主函数中仅有两个可能的日志值为0或2
值1的记录发生在完全不同的范围和线程中。并且console.log不关心它来自哪个线程。它只是按照接收数据的顺序进行记录。forEach中的返回false无效,处理将在整个数组中循环后继续
请改用普通循环:
for (let i = 0, len = els.length; i < len; i++) {
let el = els[i];
if(el.value == ''){
alert('Ai uitat unul sau mai multe campuri la educatie');
console.log(1);
return false;
}
}
我认为console.log1之后的返回值为false,只会中断forEach块/循环,然后到达console.log2,我怎么能在那里停止执行呢?我想出来了,非常感谢,非常感谢,我为此折磨了我的大脑近3个小时相信我,我去过那里。Javascript有时会令人困惑。