javascript onsubmit在同一个调用中返回两个不同的值

时间:2017-08-30 18:43:11

标签: javascript html validation

验证功能

     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,所以我猜测它是由循环引起的?

2 个答案:

答案 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;
  }
}