为什么提交if if condition false的表单?

时间:2016-03-15 16:55:57

标签: javascript html forms submit

我必须在HTML表单中进行一些验证。我不明白为什么当这两个条件之一是假的时候表格提交。主要'功能是这样的:

 var marc = false;
 var dnif = false;

window.addEventListener('submit', function () {
    marc = marcado();
    dnif = nif();
    if(marc && dnif){
        document.getElementById("formm").submit();
    }
}, false);

方法如下:

function nif() {
  var campo = document.getElementById("dni_id");
  var dni = campo.value;
  numero = dni.substr(0, dni.length - 1);
  let = dni.substr(dni.length - 1, 1);
  numero = numero % 23;
  letra = 'TRWAGMYFPDXBNJZSQVHLCKET';
  letra = letra.substring(numero, numero + 1);
  if (letra !== let) {
    alert('El formato del DNI introducido no es el correcto');
    document.form.dni_id.focus();
    return false;  
  } else {
    return true;
  }


function marcado() {
  if (document.form.terminado.checked) {
    return true;
  } else {
    alert("Debes aceptar los términos y condiciones");
    document.form.terminado.focus();
    return false;
  }
}

功能正常。当我用控制台尝试它们时,它们工作正常。 然后我执行页面和“警报”。出现并且返回值为false但表单提交。

有什么想法吗?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您当前的代码是一个附加到表单提交的侦听器,这意味着一旦表单提交代码运行,您应该绑定到按钮并使用单击,并在该代码块中使用event.preventDefault()来防止自动html表单提交。

或者,您可以更改按钮以键入,按钮而不是提交,并使用html onclick重定向到处理表单提交的javascript函数。

编辑:我认为我错了,你应该能够仍然绑定提交,只要你包括,event.preventDefault();在您的绑定中,表单不应自动提交。但是我的其他解决方案也应该可以正常工作。