2012-07-06 30 views
5

Tengo un formulario con algunos valores de acción y onsubmit, que se envía a través de una etiqueta de entrada de envío. El problema es que debe ser submittable por dos botones, así que escribió una función para el segundo botón para cambiar la acción y los valores onsubmit de la forma:javascript change form onsubmit dynamically

<a href="javascript:submitCompare()" class="submit">Compare</a> 

function submitCompare() 
{ 
    document.myForm.action = "anotherAction.php"; 
    document.myForm.onsubmit = function() {return countChecked()}; 
    document.myForm.submit(); 
} 

function countChecked() 
{ 
    var n = $(".reports input:checked").length; 
    if (n >= 3) { 
    alert ('You must select less than 3 reports.'); 
    return false; 
    } 
    else return true; 
} 

Después de hacer clic en el Comparar vincularlo me envía a la otra página de Action.php correctamente, pero incluso cuando tengo más de 2 casillas de verificación seleccionadas (que es la regla de validación). ¿Alguien puede ayudarme a hacer que la función de envío funcione correctamente?

+0

Apenas una nota lateral, creo que '(n> 2)' es suficiente en lugar de '(n> = 3)' – codingbiz

Respuesta

1

En submitCompare(), que de manera explícita e incondicionalmente llama

document.myForm.submit(); 

Lo que es probable que desee en su lugar hay

if (countChecked()) { 
    document.myForm.submit(); 
} 
+0

¡Muchas gracias, de esa manera simplifica la idea y realmente funciona! – user1507558

+0

no olvides aceptar la respuesta correcta ;-) (marca de verificación a la izquierda) –

4
document.myForm.onsubmit = function() {return countChecked()}; 

debería ser

document.myForm.onsubmit = function(e) { 
    e = e || window.event; 
    if (!countChecked()) { 
     e.preventDefault(); 
     e.returnValue = false; 
    } 
}; 

Volviendo falsa en una presenten acaba de terminar la ejecución de cualquier otra función. Desea evitar el comportamiento de envío predeterminado si no desea que se envíe.

+0

intentado pero no hubo ningún cambio en el comportamiento del proceso de envío. – user1507558

+0

Quizás sea su función countChecked. intente hacer algo de console.log para ver si está obteniendo la cantidad correcta de casillas de verificación marcadas – Trevor

+0

countChecked() devolvió los valores correctos. Realmente no sé por qué tu solución no funcionó, pero @Otto Allmendinger lo hizo bien para mí, así que cerró el caso :) – user1507558

2

Es una respuesta tardía, pero si alguien está buscando en este ...

en lugar de:

document.myForm.onsubmit = function() {return countChecked()}; 

Creo que quería:

document.myForm.setAttribute("onsubmit", "return countChecked()"); 
+0

Has guardado mi valioso último minuto – TheRumboJumbo

Cuestiones relacionadas