Cómo deshabilitar el botón de enviar en jQuery si los campos de formulario no han sido modificados?
-
22-08-2019 - |
Pregunta
Tengo un formulario HTML que contiene los campos de texto, casillas de verificación, botones de opción y el botón de enviar.
Me gustaría que presentar botón se activa únicamente si el contenido de los campos se modifican.Ahora aquí está la trampa: si el usuario modifica el contenido del campo de volver a los valores originales, el botón del formulario debe ser desactivado de nuevo.
- Original valor del campo "foo" => botón de enviar está deshabilitado
- Usuario cambia el valor del campo "bar" => enviar botón se activa
- Usuario cambia el valor del campo de regreso a "foo" => botón de enviar se convierte en discapacitado de nuevo
Cómo lograr esto con jQuery?¿Hay algún tipo de solución general o secuencia de comandos que se podría utilizar con cualquier forma?
Editar:Lo que yo estoy pidiendo no se puede hacer con simples sucio de seguimiento de estado.
Solución
Utilice el seguimiento del estado sucio. Adjuntar un valor booleano (por ejemplo IsDirty) para cada control de entrada y de palanca siempre que los cambios de valor. Si bien la presentación del cheque formulario si el atleast uno o más valores han cambiado y luego enviar el formulario. De lo contrario, muestra una alerta al usuario.
Otra solución es llamar a una función común cuando un valor controles cambios. En esta función se puede establecer una variable global (IsDirty) a cierto si algo cambió y también activar / desactivar el botón de envío.
var isDirty = false;
function SomethingChanged(){
if( !isDirty ) isDirty = true;
btnSubmit.disabled = !isDirty;
}
Función de control genérico para cualquier
Los supuestos: Añadir el valor inicial de cada control a un atributo "InitVal"
function SomethingChanged(control){
if( control.value != control.InitVal )
control.IsDirty = true;
else
control.IsDirty = false;
}
En la función anterior para que sea genérica que puede tener funciones separadas para cada tipo de control como TextBoxChanged y DropDownChanged etc, pero tiene los dos atributos siguientes en cada control
- InitValue - Valor inicial del control
- IsDirty - Valor booleano que indica que el valor del control ha cambiado
Otros consejos
A sólo dos pasos:
- almacenar un hash de todos los valores iniciales en una variable javascript
- onchange de cada entrada que vuelve a calcular hash y verifica con la almacenada. si es la misma, deshabilitar el botón de enviar, si no lo es, activarlo.
Tener un vistazo a la plug-in de validación .
Esto parece una respuesta mejor.
1401 -Utilizar-jQuery-To-apalancamiento-The-OnChange-Método-Of-Inputs.htm
No he probado a continuación cuál es :-) Pero es que lo que quiere decir?
$(document).ready(function() {
$("#myform :input").attr("init",$(this).val()).bind("change.dirty", function(evt) {
if ($(this).val()!=$(this).attr("init")) $(this).addClass("dirty");
else $(this).removeClass("dirty");
$('#thebutton').attr("disabled",!$("#myform .dirty").size());
});
});
* - lucio
Debería ser posible para salvar toda la forma de objeto (ya sea tal como es, o iterando con each () y almacenar los datos en un mapa), y luego hacer lo mismo onSubmit y compara ambos valores.
Puede utilizar dirtyField plugin de lugar y establecer denoteDirtyForm: cierto. Ahora bien, si el formulario tiene "dirtyForm" clase significa que tiene cambios sin guardar.
Lo que podría hacer es configurar un script de jQuery para escanear la página en la carga de la página y compruebe si hay una forma, un inventario de los campos y sus valores, y después comprobar contra esa matriz de referencia de entrada cada vez que se actualiza una entrada.