2012-03-25 15 views
6

Estoy tratando de desvincular o volver a habilitar la opción predeterminada para evitar que mi formulario envíe buenos datos.Rehabilitación Enviar después de prevenir el valor predeterminado

He intentado varios ejemplos. Aquí está mi código y algunos de los ejemplos que probé.

Este código funciona muy bien para lo que quiero. Solo lo último y restablecer el div que puedo implementar después de obtener esto.

function lengthRestriction(elem, min, max) { 
    var uInput = elem.value; 
    if (uInput.length >= min && uInput.length <= max) { 
     return true; 
    } else { 
     var cnt = document.getElementById('field'); 
     cnt.innerHTML = "Please enter between " + min + " and " + max + " characters"; 
     elem.focus(); 
     $('#ShoutTweet').submit(function(e) { 
      e.preventDefault(); 

      //bind('#ShoutTweet').submit(); 
      //$('#ShoutTweet').trigger('submit'); 
     }); 
    } 
}​ 

tengo un jsbin configurado demasiado http://jsbin.com/ebedab/93

+0

Usted podría intentar e.preventDefault() en el caso de presentar de la forma y self.submit() para el efecto contrario – dimirc

Respuesta

5

No estoy completamente seguro de lo que están pidiendo, pero si su objetivo es destruir su controlador personalizado submit, a continuación, utilizar esto:

$("#ShoutTweet").unbind("submit"); 

esto supone que tienes una forma normal (no Ajax).

+0

wow funcionó, estaba poniendo el código en el lugar equivocado. Gracias, lo acepto cuando el temporizador está apagado. –

+0

De nada. ¿Supuse correctamente lo que intentas hacer? ¿Quisiste deshabilitar tu validación personalizada? –

+0

sí, lo adivinaste bien. Me dicen que no lo estoy haciendo bien:/ –

1

Sólo tiene que llamar Enviar en el formulario

$('#ShoutTweet').submit(); 
+0

¿Debería ponerlo en el bloque de código? –

+0

Eso depende de lo que pretendas hacer, normalmente lo llamarías después de la llamada ajax. – max

7

No trate de constitución y cancelación de un manejador de presentar dentro de su función de validación, hacerlo a la inversa: la validación llaman desde dentro de un único controlador presentar, y sólo llaman .preventDefault() si falla la validación:

$(document).ready(function() { 

    $('#ShoutTweet').submit(function(e) { 
     if (/* do validations here, and if any of them fail... */) { 
      e.preventDefault(); 
     } 
    }); 

}); 

Si pasan todas sus validaciones simplemente no llame al e.preventDefault() y el evento de envío se realizará de forma predeterminada.

alternativa, se puede volver false de su manejador de someterse a evitar que el valor por defecto:

$('#ShoutTweet').submit(function(e) { 
     if (!someValidation()) 
      return false; 

     if (!secondValidation()) 
      return false; 

     if (someTestVariable != "somevalue") 
      return false; 

     // etc. 
    }); 
+0

intentaré esto también. encanta aprender la manera correcta de hacer las cosas –

+0

Es posible que desee revisar esto antes de pasar al uso de la declaración de devolución: [http://fuelyourcoding.com/jquery-events-stop-misusing-return-false/](http:/ /fuelyourcoding.com/jquery-events-stop-misusing-return-false/) Además, el uso de preventDefault() le permitirá mostrar todos los errores de validación a la vez proporcionando una experiencia de usuario más limpia. – lhoess

+0

@lhoess - Acepto que mostrar todos los errores de validación a la vez es más agradable (y eso es lo que hago en mis propios proyectos), pero no estoy de acuerdo con que el retorno sea un "uso incorrecto" - si el efecto que desea es salir de el manejador de inmediato y usted sabe que el burbujeo no importa (y para un envío de un formulario, generalmente no me importa el burbujeo), entonces está bien. Por supuesto, puede comprometerse e ir con 'event.preventDefault(); return; '(sin el' falso'). – nnnnnn

Cuestiones relacionadas