validación de campo - tanto del lado del servidor como del cliente

Tengo un formulario en el que un campo en particular requiere validación tanto del lado del servidor como del lado del cliente. Estoy usando el complemento de validación jquery para realizar la validación del lado del cliente. a continuación se muestra el código para el mismo.

$('#createapp').validate({
    rules: {
      appname: {
        minlength: 8,
        required: true
      },
      apptitle: {
        required: true
      }
    },
    highlight: function(label) {
        $(label).closest('.control-group').addClass('error');
    },
    success: function(label) {
        label
            .text('OK!').addClass('valid')
            .closest('.control-group').addClass('success');
    }
  });

Ahora necesito verificar si el nombre de la aplicación que el usuario está tratando de ingresar ya existe en la base de datos o no. Estoy usando ajax para realizar la verificación usando este código

$('#appname').focusout(function(){
    $.ajax({
        type: "POST",
        url: "<?php echo base_url();?>index.php/app/application/check_app",
        data: "appname="+$("#appname").val(),
        success: function(msg){

            if(msg == "false")
            {
               var controlDiv = $('#appname').closest('.control-group');
                   controlDiv.addClass('error');
                   controlDiv.removeClass('success');
            }
            else
            {
                var controlDiv = $('#appname').closest('.control-group');
                   controlDiv.addClass('success');
                   controlDiv.removeClass('error');
            }
        }
    });
});

Aunque esto hace que el control de campo sea rojo, no detiene el envío del formulario. No quiero replicar la lógica en el lado del servidor para verificar y devolver el error.

¿Qué y dónde puedo agregar código para deshabilitar el envío de formularios si el nombre de la aplicación ya está en uso?

por favor ayuda

preguntado el 03 de mayo de 12 a las 19:05

3 Respuestas

Puede que me esté perdiendo algo, pero creo que estás tomando el enfoque equivocado. jQuery Validate tiene soporte para validaciones remotas y no lo estás usando.

Por favor, eche un vistazo a remote regla.

contestado el 03 de mayo de 12 a las 19:05

Intenta usar $('#createapp').validate( ...code...).cancelSubmit = true;

contestado el 03 de mayo de 12 a las 19:05

Supongo que #createapp es tu forma? Si es así, modifico el atributo de envío si el nombre ya está en uso.

$('#appname').focusout(function(){
    $.ajax({
        type: "POST",
        url: "<?php echo base_url();?>index.php/app/application/check_app",
        data: "appname="+$("#appname").val(),
        success: function(msg){

            if(msg == "false")
            {
               var controlDiv = $('#appname').closest('.control-group');
                   controlDiv.addClass('error');
                   controlDiv.removeClass('success');
               $('#createapp').attr('submit', 'return false;');
            }
            else
            {
                var controlDiv = $('#appname').closest('.control-group');
                   controlDiv.addClass('success');
                   controlDiv.removeClass('error');
            }
        }
    });
});

contestado el 03 de mayo de 12 a las 19:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.