2012-07-06 17 views
5

Ho un modulo con alcuni valori di azione e onsubmit, che viene inviato tramite un tag di input di invio. Il problema è che dovrebbe essere submittable da due pulsanti, così ho scritto una funzione per il secondo pulsante per modificare l'azione e valori OnSubmit della forma:javascript modulo di modifica onsubmit dinamicamente

<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; 
} 

Dopo aver cliccato sul Confronta collegarlo mi manda al un'altra pagina di Act.php, anche se ho più di 2 caselle selezionate (che è la regola di validazione). Qualcuno può aiutarmi a far funzionare correttamente la funzione onsubmit?

+0

Solo un lato nota, penso '(n> 2)' è sufficiente invece di '(n> = 3)' – codingbiz

risposta

1

In submitCompare(), è esplicitamente e incondizionatamente chiamare

document.myForm.submit(); 

Che probabilmente si desidera invece c'è

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

Grazie mille, in questo modo semplifica l'intera idea e funziona davvero! – user1507558

+0

non dimenticare di accettare la risposta corretta ;-) (segno di spunta a sinistra) –

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

dovrebbe essere

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

Tornando falsa su un presentare sarà solo cessare ogni ulteriore esecuzione della funzione. Si desidera impedire il comportamento di invio predefinito se non si desidera inoltrarlo.

+0

provato, ma non c'era nessun cambiamento nel comportamento del processo di invio. – user1507558

+0

Forse è la tua funzione countChecked. prova a fare qualche console.log per vedere se sta ottenendo la giusta quantità di caselle di controllo selezionate – Trevor

+0

countChecked() ha restituito valori corretti. Non so davvero perché la tua soluzione non ha funzionato, ma @Otto Allmendinger ha capito bene per me, quindi la custodia è chiusa :) – user1507558

2

Si tratta di una risposta in ritardo, ma se qualcun altro sta guardando questo ...

anziché:

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

Penso che si voleva:

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

Hai salvato il mio prezioso ultimo minuto – TheRumboJumbo

Problemi correlati