验证功能
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。 这里的问题是它输出1和2(如果我将第三个返回值改为true则提交表单),这非常奇怪...... 控制台中也没有显示错误
如果它进入第一个if,那么它只输出0,所以我猜测它是由循环引起的?
答案 0 :(得分:1)
此:
[].forEach.call(els, function (el){
if(el.value == ''){
alert('Ai uitat unul sau mai multe campuri la educatie');
console.log(1);
return false;
}
});
导致从与main函数不同的范围返回。您的主要功能中唯一两个可能的日志值(在拦截您的提交时)是&#34; 0&#34;或&#34; 2&#34;。
记录&#34; 1&#34;的值发生在完全不同的范围和线程中。并且console.log
并不关心它来自哪个线程。它只是记录它接收数据的顺序。
答案 1 :(得分:0)
forEach中的return false
无效,循环整个数组后处理将继续
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
改为使用普通循环:
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;
}
}