Estoy trabajando en un gran proyecto heredado de formularios web de Asp.Net. Tengo un campo que llega a nuestro servidor para verificar la unicidad en la validación. Todo en este proceso funciona, excepto que el campo importante se validará en la activación después de cambiar el enfoque y luego volver a enfocarse en el campo. El campo es una simple entrada html. He intentado establecer onkeyup en falso entre otros eventos. He intentado usar un onkeyup personalizado. No importa lo que intente, la validación de la clave sigue regresando.
El usuario se centrará en el campo e introducirá sus datos. Durante la entrada inicial, la validación no se activa hasta que cambia el enfoque. Luego, cuando el usuario vuelve a enfocarse en el campo, la validación se activa en cada tecla. Tengo que evitar este comportamiento para reducir el tráfico de red. De lo contrario, lo llamaría bueno y seguiría adelante. Cualquier consejo es muy apreciado. El siguiente código está simplificado del proyecto, pero todavía me da el comportamiento mencionado. Por favor, hágamelo saber si puedo aclarar algo.
jQuery v3.4.1 Complemento de validación de jQuery - v1.19.0
<form id="form1" runat="server"> <div style="padding: 100px;"> <div class="control-group"> <label for="claimNumber" class="control-label" style="width: 200px;">Claim #*</label> <div class="controls" style="margin-left:20px"> <input type="text" class="form-control span3" id="claimNumber" name="claimNumber" maxlength="128"/> <button style="margin-left: 10px">Validate</button> </div> </div> </div> </form> <script> var isUsed; var form = $("#form1").show(); var form1ValidationRules = { rules: { claimNumber: { uniqueClaim: true, required: true } } }; var validateForm = function () { $('input,select,textarea', 'div.hide').not('input[type=radio]').each(function () { $(this).val(''); }); return $("#form1").validate(form1ValidationRules).form(); }; $(document).ready(function () { $.validator.addMethod( "uniqueClaim", function () { console.log("validating"); return (isUsed == false) }, "Claim number is already in use for your company." ); $('form#form1').validate(form1ValidationRules); $('#myform').validate({ onkeyup: false }); }); </script>$('form#form1').validate(form1ValidationRules); $('#myform').validate({ onkeyup: false }); ¿Dónde está $myform ? Ese sería un formulario con id="myform" . Parece que ha adjuntado .validate() a un formulario que no existe en este código. Esta llamada sería ignorada.
Si se supone que es el mismo formulario y corrige el selector #myform , aún no funcionará porque llamó .validate() dos veces en el mismo formulario. Esta segunda llamada sería ignorada.
Si está utilizando el complemento de validación discreta como parte de su proyecto ASP, entonces está llamando a .validate() tres veces en el mismo formulario. La llamada .validate() creada automáticamente por el complemento discreto se llamará primero y las demás se ignorarán.
El complemento jQuery Validate usa .validate() para inicializar el complemento en su formulario UNA vez. Si se llama a .validate() varias veces, se ignorarán todas las llamadas posteriores.
Los usuarios de ASP que tienen instalado Unobtrusive generalmente usan el método .setDefaults() para anular cualquier configuración de jQuery Validate creada por Unobtrusive. Tenga en cuenta que esto anularía la configuración de jQuery Validate para todos los formularios de la página.