2012-09-13 14 views
18

Aquí está el código HTML para el formulario:jQuery validación de plug-in de error: TypeError: validador no está definido

<form method="post" id="login" action="/login"> 
<div class="login-element"> 
    <label for="email">E-Mail</label> 
    <input type="text" name="email"> 
</div> 
<div class="login-element"> 
    <label for="password">Passwort</label> 
    <input type="password" name="password"> 
</div> 
<div class="login-element"> 
    <input type="submit" value="Login"> 
</div> 
</form> 

y aquí está el código que he utilizado para la validación:

$(document).ready(function() { 
    $("#login").validate({ 
     debug: true, 
     rules: { 
      email: { 
       required: true, 
       email: true 
      }, 
      password: { 
       required: true 
      } 
     }, 
     messages: { 
      email: { 
       required: "Please enter a email adress", 
       email: "Please enter a valid email address" 
      }, 
      password:"Please enter password" 
     } 
    }); 
    }); 

En la consola de siguiente se registra el error:

TypeError: validator is undefined 
...or.settings[eventType] && validator.settings[eventType].call(validator, this[0],... 

¿Cuál podría ser el problema aquí?

+0

Parece que olvidó incluir el plugin. – Sparky

+0

Pensé que ese podría ser el problema. Pero en la cabeza tengo lo siguiente: 'código'

+0

Eso no significa nada si no están todos ubicados en esas URL sin darles ningún error 404. – Sparky

Respuesta

8

Debe incluir el script de validación en el encabezado de su documento.

De esta manera:

<script src="/js/libs/jquery.validate.js" type="text/javascript"></script> 

Además, compruebe en el HTML representado que el formulario de identificación es correcta.

utilizo este código para llamar a validar en mis sitios

 //Validate Form 
     var ids = []; 
     $("form").each(function() { 
      ids.push(this.id); 
     }); 
     var formId = "#" + ids[0] 
     $(formId).validate(); 
+0

Estoy seguro de que incluí jquery.validate.js porque esto se arrojó un error en la línea 316 desde ese archivo. –

+0

¿Has probado mi segundo fragmento de código? –

+0

@AndrewWalters, no hay nada de malo en el código del OP ya que lo ha publicado. – Sparky

18

ocurrido este error porque no tenía otro elemento HTML con el mismo id. Después de eliminar ese código de identificación funcionó bien.

+0

Nota adicional: estaba teniendo un error similar, la solución, en mi caso era eliminar una actualización de validación adicional que se refería a una ID que ya no existía ... –

+0

Olvidé agregar clase a la variable (que contenía HTML a append) que estaba apuntando a la validación después de agregar dinámicamente elementos. Obtenía 'TypeError: j no está definido'. Aunque el error fue diferente (pero similar, lo que me llevó a esta publicación), el problema fue el mismo que se describe aquí. Gracias. – Fr0zenFyr

+0

mi error fue causado porque olvidé cerrar una etiqueta dentro de mi formulario. Tuve '

    ' en su lugar '
' humph! – guitarlass

2

El mismo problema apareció para mí. La razón de que el error lo que yo estaba usando el código:

if ($("#invalidFormId").valid()) { 
.... 
} 

Y el id del elemento form no era válida

1

En mi caso, el problema vino que tenían dos versiones de instancia de jQuery UI i jQuery . Esto hizo que el código normal de Jquery funcionara bien, pero eliminó la integridad de $ .validator.

1

En mi caso, el error fue porque el validador se llamaba demasiado pronto. Moví el código a una función separada y lo llamé usando el método de retraso de underscore.js. Trabajado como un encanto.

_.delay(doValidations); 

function doValidations() { 
... 
}); 
7

Para cualquier persona todavía en busca de una respuesta y las respuestas anteriores trabajos Dont ..

He pasado los últimos 3 horas tratando de que toda la solución y ninguno de ellos trabajaron.

finalmente me di cuenta de un error muy estúpido, que había inicializado Jquery dos veces en mi solicitud

una vez en la cabeza donde yo había incluido 3 guiones

<script src="~/Scripts/jquery-1.10.2.min.js"></script> 
    <script src="~/Scripts/jquery.validate.min.js"></script> 
    <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script> 

y una vez más al final de la página donde solo tenía la línea.

<script src="~/Scripts/jquery-1.10.2.min.js"></script> 

Esto restablecía la función de validación de $ y hacía que todo se rompiera.

Algunas cosas para comprobar en los casos donde las validaciones no se activan.

  1. ¿El guión está en el orden correcto? jquery seguido de validate seguido de discreto.

  2. ¿Está definida la función $ .validator? Verifique rápidamente en la consola del navegador

  3. ¿Se está creando dinámicamente el formulario para validar? Si es así, es posible que deba reinicializar el complemento del validador en el formulario, la mejor manera que he encontrado de hacerlo es la siguiente, elija la que más le convenga.

    $.validator.unobstrusive.parse('#myForm') 
    

o

$('#myForm').validate() // this just makes the validator plugin consider the form for unobstrusive validation 

o

$('#myForm').valid() // this will trigger unobstrusive validation on the form. 
  1. Si ha complicado cargas ajax para muchas formas, asegúrese de que las secuencias de comandos no se incluyen una y otra vez en cada página de Ajax, también se aseguran de que los elementos en la página principal todavía tengan nombres únicos.

Espero que esto ayude.

+0

Exactamente lo que estaba pasando en mi caso. He inicializado jQuery en el encabezado y luego en uno de los componentes de Ajax. Como resultado, jQuery.validator era nulo. Una vez que eliminé la inicialización duplicada del componente AJAX, ¡funcionó! Gracias. –

1

Tenía @Scripts.Render("~/bundles/jquery") en la vista principal (_Layout.cshtml) y también había definido algunas otras etiquetas de script de jquery en otra vista, que chocaron.

0

El complemento viene en bibliotecas separadas, debe incluirlas en su html.

<script src="../jquery-validation/dist/jquery-validate.min.js"></script> 
<script src="../jquery-validation/dist/additional-methods.min.js"></script> 
0

Lo mismo sucedió aquí. Para mí fue un error tipográfico en mi código:

$(document).ready(function(){ 
    //START of validate 
$('#reply').validate({ 
    rules:{ 
     message:{ 
      required: true, 
      }, 
     }, 
    submitHandler: function(form) { 
     var data = $("#reply").serialize(); 
     $.ajax({ 
      type:"POST", 
      url:"ajax/scripts/msg_crt.php", 
      data:data, 
      success:function(data){ 
       alert("Loaded"); 
       } 
      }); 
     } 
    }); 
    //END of validate 
    }); 

$(document).on('click','#send', function(){ 
    if($('#replay').valid()){// <--- Here is my selector typo 
     $("#replay").submit(); // <--- Here is my selector typo 
     } 
     return false; 
    }); 
1

Debido a que este es el primer tema que muestra Google para "validador no está definido" entonces voy a describir mi problema resuelto, tal vez alguien lo encontrará servicial.

Estaba usando el atributo 'maxlength' (nada especial) y obtuve este error. La razón era formas anidadas. Uno de los textarea estaba dentro de ambas formas. Puede suceder cuando tienes modales (diálogos) con formularios en la vista principal.

0

Este problema me estaba ocurriendo al llamar a validator.destroy() - el error se estaba produciendo dentro del método staticRules del complemento. La causa que resultó ser el elemento de formulario asociado (element.form) se separó del DOM. Lo resolví marcando el elemento estaba en el DOM antes de llamar a destruir, mediante el siguiente método:

document.contains(element) 

Esperamos que esto ayude a alguien.

Cuestiones relacionadas